我想用我拥有的值替换多维数组中的某些列。我尝试了以下内容。
cols_to_replace = np.array([1, 2, 2, 2])
original_array = np.array([[[255, 101, 51],
[255, 101, 153],
[255, 101, 255]],
[[255, 153, 51],
[255, 153, 153],
[255, 153, 255]],
[[255, 203, 51],
[255, 204, 153],
[255, 205, 255]],
[[255, 255, 51],
[255, 255, 153],
[255, 255, 255]]], dtype=int)
只用(0, 0, 255)
我希望我可以使用数组cols_to_replace
original_array[:, cols_to_replace] = (0, 0, 255)
这给出了错误的答案!
意外输出。
array([[[255, 101, 51],
[ 0, 0, 255],
[ 0, 0, 255]],
[[255, 153, 51],
[ 0, 0, 255],
[ 0, 0, 255]],
[[255, 203, 51],
[ 0, 0, 255],
[ 0, 0, 255]],
[[255, 255, 51],
[ 0, 0, 255],
[ 0, 0, 255]]])
我的预期输出
array([[[255, 101, 51],
[ 0, 0, 255],
[255, 101, 255]],
[[255, 153, 51],
[255, 153, 153],
[ 0, 0, 255]],
[[255, 203, 51],
[255, 204, 153],
[ 0, 0, 255]],
[[255, 255, 51],
[255, 255, 153],
[ 0, 0, 255]]])
真正发生了什么?
我如何完成我想要做的事情(即每个行中的access,col 1,col 2,col 2,col 2并替换值。
如果我想删除这些列,是否有numpy
方法可以执行此操作?
答案 0 :(得分:2)
您的预期输出由以下产生:
>>> original_array[np.arange(cols_to_replace.size), cols_to_replace] = 0, 0, 255
这与您的原始方法不同,因为高级索引和切片索引是“单独”评估的。通过将:
更改为arange
,我们将第0个维度切换为高级索引,以便cols_to_replace
在第0个坐标中逐个元素与0, 1, 2, ...
配对。
您可以使用如下掩码删除您的选择:
>>> mask = np.ones(original_array.shape[:2], bool)
>>> mask[np.arange(cols_to_replace.size), cols_to_replace] = False
>>> original_array[mask].reshape(original_array.shape[0], -1, original_array.shape[2])
array([[[255, 101, 51],
[255, 101, 255]],
[[255, 153, 51],
[255, 153, 153]],
[[255, 203, 51],
[255, 204, 153]],
[[255, 255, 51],
[255, 255, 153]]])