给定条件替换多维数组的 2/3
Replace 2/3 of a multi-dimensional array given a condition
我有以下数据
>>> import numpy as np
>>> original_classes=np.load("classes.npy")
>>> original_features=np.load("features.npy")
这些 NumPy 数组具有以下形状
>>> original_classes.shape
(12000,)
>>> original_features.shape
(12000, 224, 224, 3)
我想做的是用新数组
的内容替换 original_features NumPy 数组的 2/3
>> new_features=np.load("new-features.npy")
>> new_features.shape
(600, 224, 224, 3)
但是,这些数据必须替换 original_features Numpy 数组 中的 600 个位置,其中 original_classes==11.
也就是说,original_classes数组中共有12个唯一的class,每个class有1000个特征在 original_features 中。我想简单地用 new_features 数组中的 600 个特征替换 class 11 的 600 个特征,用 python 有什么办法吗?
P.S=可以找到数据here
首先,我们应该找出哪些索引是 class 11:
items_11 = original_classes == 11
idx_11 = np.argwhere(items_11).ravel() # it gives the array of args equal to 11
编辑
然后,我们选择最后 600 个项目:
selected_idx = idx_11[len(idx_11)-600:]
或者你可以select随机:
size = ( 2 * len(idx_11) ) // 3
selected_idx = np.random.choice(idx_11, size=size, replace=False)
新数据:
mask = np.ones(len(original_features), dtype=bool) # all elements included/True.
mask[selected_idx] = False
new_x = original_features[mask]
new_y = original_classes[mask]
new_x = np.concatenate([new_x,new_features],axis=0)
new_y = np.concatenate([new_y,np.ones(len(new_features)) * 11],axis=0)
我有以下数据
>>> import numpy as np
>>> original_classes=np.load("classes.npy")
>>> original_features=np.load("features.npy")
这些 NumPy 数组具有以下形状
>>> original_classes.shape
(12000,)
>>> original_features.shape
(12000, 224, 224, 3)
我想做的是用新数组
的内容替换 original_features NumPy 数组的 2/3>> new_features=np.load("new-features.npy")
>> new_features.shape
(600, 224, 224, 3)
但是,这些数据必须替换 original_features Numpy 数组 中的 600 个位置,其中 original_classes==11.
也就是说,original_classes数组中共有12个唯一的class,每个class有1000个特征在 original_features 中。我想简单地用 new_features 数组中的 600 个特征替换 class 11 的 600 个特征,用 python 有什么办法吗?
P.S=可以找到数据here
首先,我们应该找出哪些索引是 class 11:
items_11 = original_classes == 11
idx_11 = np.argwhere(items_11).ravel() # it gives the array of args equal to 11
编辑
然后,我们选择最后 600 个项目:
selected_idx = idx_11[len(idx_11)-600:]
或者你可以select随机:
size = ( 2 * len(idx_11) ) // 3
selected_idx = np.random.choice(idx_11, size=size, replace=False)
新数据:
mask = np.ones(len(original_features), dtype=bool) # all elements included/True.
mask[selected_idx] = False
new_x = original_features[mask]
new_y = original_classes[mask]
new_x = np.concatenate([new_x,new_features],axis=0)
new_y = np.concatenate([new_y,np.ones(len(new_features)) * 11],axis=0)