给定条件替换多维数组的 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)