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

y1D から 2D (1 列)に変更する必要があります。

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代わりに行ベクトルを使用しているため、列ではなく行で埋められます。

(11,)より技術的には、 の配列ではなく、shape の配列を取得したため、2D 配列を埋めるときに(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))

同じ結果です。

于 2013-09-12T18:47:09.690 に答える