繁体   English   中英

用另一个数组填充numpy数组的一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM