如何在不使用循环的情况下,根据来自另一个数组的索引值,将NumPy数组中不同通道的值设置为零?

v09wglhw  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(167)

我有一个数字数组“arr”和一个索引数组“ind”:

import numpy as np

arr = np.random.randint(255, size=(100,64,64,16))

ind = np.random.randint(16, size=(100,2))

arr中,最后一个维度表示通道,而第一个维度表示采样数。在ind中,每行代表对应于arr中的每个样本的两个随机通道索引。我希望使arr中对应于ind中的通道索引的arr中的每个样本的整个64 x 64的值等于0不使用任何循环。如何才能做到这一点?
我曾尝试使用:

arr[:,:,:,ind] = 0

我原以为索引将按照样本进行广播,但结果整个数组变成了0。使用循环非常耗时且效率低下。我也想使用np.where,但我不确定使用什么条件来访问数组的索引。

7gyucuyw

7gyucuyw1#

我相信您可以使用np.put_along_axis来执行以下操作:

import numpy as np

arr = np.random.randint(255, size=(100,64,64,16))
ind = np.random.randint(16, size=(100,2))

np.put_along_axis(arr, ind[:, None, None, :], 0, axis=3)

相关问题