2

我有:

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)是这个的转置。即填充列而不是行

有什么建议么?

4

3 回答 3

3

您需要y从 1D 更改为 2D(一列):

x[:,:,:,0,0] = y[:, np.newaxis]

或者,

x[:,:,:,0,0] = y.reshape(11,1)
于 2013-09-12T16:23:26.703 回答
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.]]
于 2013-09-12T09:14:42.003 回答
0

问题很简单:您使用的是行向量y而不是列向量,因此它是按行而不是按列填充。

从技术上讲,您有一个 shape 数组(11,),而不是 数组(11, 1),因此它(1, 11)在填充 2D 数组时会广播。

相比:

>>> 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))

结果相同。

于 2013-09-12T18:47:09.690 回答