如何为另一个数组筛选的列中的元素设置值

时间:2016-03-01 14:25:08

标签: python numpy

我有一个m X 3矩阵和一个长度为m .的数组 我想做以下

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
b = np.array([1, 2, 1, 3, 3])
me = np.mean(a[np.where(b==1)][:, 0])
a[np.where(b==1)][:, 0] = me

问题在于

a[np.where(b==1)][:, 0]

返回[1, 7]而不是[4, 4]

1 个答案:

答案 0 :(得分:2)

您正在将索引数组与切片组合在一起: [np.where(b==1)]是索引数组,[:, 0]是一个切片。您执行此操作的方式将返回一个副本,因此您可以在副本上设置新值。你应该这样做:

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
b = np.array([1, 2, 1, 3, 3])
me = np.mean(a[np.where(b==1)][:, 0])
a[np.where(b==1), 0] = me

另请参阅https://docs.scipy.org/doc/numpy/user/basics.indexing.html以了解索引数组与切片的组合。