Python NumPy:在非NaN位置设置NumPy数组的子集
我有一个数组A(m X n)和另一个数组W(m X n'),其中n'可以与一个非NaN掩码一起使用,该掩码被切片到第一个Python NumPy:在非NaN位置设置NumPy数组的子集,python,numpy,Python,Numpy,我有一个数组A(m X n)和另一个数组W(m X n'),其中n'可以与一个非NaN掩码一起使用,该掩码被切片到第一个n'列中,并使用该掩码来选择W中的元素并分配到A的切片部分,如下所示- mask = ~np.isnan(W) A[:,:mask.shape[1]][mask] = W[mask] 样本运行- In [121]: A Out[121]: array([[ 68., 54., 54., 15.], [ 50., 86., 84., 74.],
n'
列中,并使用该掩码来选择W
中的元素并分配到A
的切片部分,如下所示-
mask = ~np.isnan(W)
A[:,:mask.shape[1]][mask] = W[mask]
样本运行-
In [121]: A
Out[121]:
array([[ 68., 54., 54., 15.],
[ 50., 86., 84., 74.],
[ 27., 39., 43., 24.],
[ 41., 45., 42., 40.],
[ 32., 90., 93., 19.]])
In [122]: W
Out[122]:
array([[ 3., 4.],
[ 3., 1.],
[ 4., nan],
[ 6., 8.],
[ nan, 6.]])
In [123]: mask = ~np.isnan(W)
In [124]: A[:,:mask.shape[1]][mask] = W[mask]
In [125]: A
Out[125]:
array([[ 3., 4., 54., 15.],
[ 3., 1., 84., 74.],
[ 4., 39., 43., 24.],
[ 6., 8., 42., 40.],
[ 32., 6., 93., 19.]])
另一种解决方案:
A = np.array([[ 68., 54., 54., 15.],
[ 50., 86., 84., 74.],
[ 27., 39., 43., 24.],
[ 41., 45., 42., 40.],
[ 32., 90., 93., 19.]])
W = np.array([[ 3., 4.],
[ 3., 1.],
[ 4., np.nan],
[ 6., 8.],
[ np.nan, 6.]])
#replace first two cols of A with W except the positions where W has nan.
A[:,0:2] = np.where(np.isnan(W),A[:,0:2],W)
print(A)
[[ 3. 4. 54. 15.]
[ 3. 1. 84. 74.]
[ 4. 39. 43. 24.]
[ 6. 8. 42. 40.]
[ 32. 6. 93. 19.]]
谢谢超级有用!
A = np.array([[ 68., 54., 54., 15.],
[ 50., 86., 84., 74.],
[ 27., 39., 43., 24.],
[ 41., 45., 42., 40.],
[ 32., 90., 93., 19.]])
W = np.array([[ 3., 4.],
[ 3., 1.],
[ 4., np.nan],
[ 6., 8.],
[ np.nan, 6.]])
#replace first two cols of A with W except the positions where W has nan.
A[:,0:2] = np.where(np.isnan(W),A[:,0:2],W)
print(A)
[[ 3. 4. 54. 15.]
[ 3. 1. 84. 74.]
[ 4. 39. 43. 24.]
[ 6. 8. 42. 40.]
[ 32. 6. 93. 19.]]