[英]Fill a column of a numpy array with another array
我有:
x = np.zeros((96,11,11,2,10),dtype=np.float64)
y = np.array([0,10,20,30,40,50,60,70,80,90,100],dtype=np.float64)
x[:,:,:,0,0] = y
print x[0,:,:,0,0]
我得到:
[[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]]
但我希望输出(对于第一维中的任何i)都可以作为此转置。 即填充列而不是行
有什么建议么?
如果希望输出为转置,请执行以下操作:
>>> import numpy as np
>>> x = np.zeros((96,11,11,2,10),dtype=np.float64)
>>> y = np.array([0,10,20,30,40,50,60,70,80,90,100],dtype=np.float64)
>>> for i in range(x.shape[0]):
>>> x[i,:,:,0,0] = x[i,:,:,0,0].T
>>> print x[0,:,:,0,0]
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 10. 10. 10. 10. 10. 10. 10. 10. 10. 10. 10.]
[ 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]
[ 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30.]
[ 40. 40. 40. 40. 40. 40. 40. 40. 40. 40. 40.]
[ 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50.]
[ 60. 60. 60. 60. 60. 60. 60. 60. 60. 60. 60.]
[ 70. 70. 70. 70. 70. 70. 70. 70. 70. 70. 70.]
[ 80. 80. 80. 80. 80. 80. 80. 80. 80. 80. 80.]
[ 90. 90. 90. 90. 90. 90. 90. 90. 90. 90. 90.]
[ 100. 100. 100. 100. 100. 100. 100. 100. 100. 100. 100.]]
它更新第一个维度,这是第34个索引的输出:
>>> print x[34,:,:,0,0]
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 10. 10. 10. 10. 10. 10. 10. 10. 10. 10. 10.]
[ 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]
[ 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30.]
[ 40. 40. 40. 40. 40. 40. 40. 40. 40. 40. 40.]
[ 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50.]
[ 60. 60. 60. 60. 60. 60. 60. 60. 60. 60. 60.]
[ 70. 70. 70. 70. 70. 70. 70. 70. 70. 70. 70.]
[ 80. 80. 80. 80. 80. 80. 80. 80. 80. 80. 80.]
[ 90. 90. 90. 90. 90. 90. 90. 90. 90. 90. 90.]
[ 100. 100. 100. 100. 100. 100. 100. 100. 100. 100. 100.]]
您需要将y
从1D更改为2D(只有一列):
x[:,:,:,0,0] = y[:, np.newaxis]
要么,
x[:,:,:,0,0] = y.reshape(11,1)
问题很简单:您使用y
的行向量而不是列向量,因此它是按行而不是按列填充。
更技术性的,你有形状的阵列(11,)
而不是数组(11, 1)
所以它以广播(1, 11)
填充二维数组时。
相比:
>>> x = np.zeros((96,11,11,2,10),dtype=np.float64)
>>> y = np.array([[0],[10],[20],[30],[40],[50],[60],[70],[80],[90],[100]],dtype=np.float64)
>>> x[:,:,:,0,0]=y
>>> print x[0,:,:,0,0]
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 10. 10. 10. 10. 10. 10. 10. 10. 10. 10. 10.]
[ 20. 20. 20. 20. 20. 20. 20. 20. 20. 20. 20.]
[ 30. 30. 30. 30. 30. 30. 30. 30. 30. 30. 30.]
[ 40. 40. 40. 40. 40. 40. 40. 40. 40. 40. 40.]
[ 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50.]
[ 60. 60. 60. 60. 60. 60. 60. 60. 60. 60. 60.]
[ 70. 70. 70. 70. 70. 70. 70. 70. 70. 70. 70.]
[ 80. 80. 80. 80. 80. 80. 80. 80. 80. 80. 80.]
[ 90. 90. 90. 90. 90. 90. 90. 90. 90. 90. 90.]
[ 100. 100. 100. 100. 100. 100. 100. 100. 100. 100. 100.]]
当然,在您的实际代码中, y
可能不是文字,而是一些早期计算的结果。 (即使它是文字,您也不想键入所有这些多余的括号。)因此,假定y
本质上是行向量,因为我们必须对其进行处理。
因此,只需即时重塑它即可:
>>> x = np.zeros((96,11,11,2,10),dtype=np.float64)
>>> y = np.array([0,10,20,30,40,50,60,70,80,90,100],dtype=np.float64)
>>> x[:,:,:,0,0] = y.reshape((11, 1))
结果相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.