我有:
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)是这个的转置。即填充列而不是行
有什么建议吗?
答案 0 :(得分:2)
如果您希望输出为转置,只需执行:
>>> 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.]]
答案 1 :(得分:2)
您需要将y
从1D更改为2D(使用一列):
x[:,:,:,0,0] = y[:, np.newaxis]
,或者
x[:,:,:,0,0] = y.reshape(11,1)
答案 2 :(得分:0)
问题很简单:您使用y
的行向量而不是列向量,因此它按行而不是按列填充。
从技术上讲,您已经获得了一个形状(11,)
的数组,而不是(11, 1)
的数组,因此在填充2D数组时它会广播到(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))
同样的结果。