我有一个a
形状(N,k)
的数组和另一个形状为b
的数组(N,)
。我想检查b
中的{em> ith 值是否包含在a[i]
中。如果不存在,我想将a[i,k]
替换为b[i]
。一个例子:
a = np.array([[1, 2, 2, 3, 4, 5],
[1, 2, 3, 3, 4, 5],
[1, 2, 3, 4, 4, 5],
[1, 2, 3, 4, 5, 5],
[1, 2, 3, 4, 5, 6]])
b = np.array([1,7,3,8,9])
输出数组应如下所示:
np.array([[1, 2, 2, 3, 4, 5],
[1, 2, 3, 3, 4, 7],
[1, 2, 3, 4, 4, 5],
[1, 2, 3, 4, 5, 8],
[1, 2, 3, 4, 5, 9]])
在N
上编写循环似乎非常低效。在我的数据集中,N
通常为1000万,而k
约为50到100.是否有一种使用numpy
函数对其进行矢量化的有效方法?
答案 0 :(得分:2)
可以找到要替换的索引:
s = a - b[:, None]
TOL = 1.e-6
ind = np.where(~(np.abs(s) <= TOL).any(axis=1))[0]
并且感谢NumPy的花哨索引,您可以在没有for循环的情况下就地更新阵列:
a[ind, :] = b[ind][:, None]