我想用我拥有的值替换多维数组中的某些列。我尝试了以下方法。
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]]])
到底发生了什么?
如何完成我想要做的事情(即在每一行中访问、col 1、col 2、col 2、col 2 并替换值。
如果我想删除这些列,有没有
numpy
方法可以做到这一点?
最佳答案
您的预期输出是由以下内容产生的:
>>> original_array[np.arange(cols_to_replace.size), cols_to_replace] = 0, 0, 255
这与您原来的方法不同,因为高级索引和切片索引是“单独”评估的。通过将 :
更改为 arange
,我们将第零维度切换为高级索引,以便 cols_to_replace
与 逐个元素配对0, 1, 2, ...
第零个坐标。
您可以使用 mask 删除您的选择,如下所示:
>>> 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]]])
关于python - 替换通过索引数组访问的 numpy ndarray 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977332/