我有一个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]
。
答案 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以了解索引数组与切片的组合。