2017-10-06 5 views
0

順序で配列要素を設定する__ValueError:私は温度の傾向を計算しようとしていた

ntimes, ny, nx = tempF.shape 
print tempF.shape 
trend = MA.zeros((ny,nx),dtype=float) 

print trend.shape 

for y in range (ny): 
    for x in range(nx): 
     trends[y,x] = numpy.polyfit(tdum, tempF[:,y,x],1) 


print trend() 

結果ができ、私はほんの数日間のpythonを使用しました

(24, 241, 480) 
    (241, 480) 
ValueErrorTraceback (most recent call last) 
<ipython-input-31-4ac068601e48> in <module>() 
    12 for y in range (0,ny): 
    13  for x in range (0,nx): 
---> 14   trend[y,x] = numpy.polyfit(tdum, tempF[:,y,x],1) 
    15 
    16 

/home/charcoalp/anaconda2/envs/pyn_test/lib/python2.7/site-packages/numpy/ma/core.pyc in __setitem__(self, indx, value) 
    3272   if _mask is nomask: 
    3273    # Set the data, then the mask 
-> 3274    _data[indx] = dval 
    3275    if mval is not nomask: 
    3276     _mask = self._mask = make_mask_none(self.shape, _dtype) 

ValueError: setting an array element with a sequence. 

ある任意の1つ助けてくれてありがとう

+0

'numpy'ルーチン、そしてnumpy.polyfitは一般にvectorised:ベクトル(1D、2D、...)で一度に動作します。したがって、N次元ベクトルを入力すると、N次元ベクトルを得ることができます。しかしここでは、それを 'trend 'の* single *要素に割り当てます。正確に 'numpy.polyfit'によって返されたものを慎重に読んでください。デバッグするには、 'numpy.polyfit'呼び出しの戻り値を何も割り当てずに直接出力してください。それはさらにあなたを助けるはずです。 – Evert

+0

ベクトル化されたアプリケーションは、一般的に明示的なループ(ここでは二重forループのような)を避けるべきであることを意味します。 NumPyはしばしばそれをフードの下で行い、Pythonのfor-loopの通常の(二重の)for-loopよりもはるかに高速に処理する傾向があります。 – Evert

+0

'polyfit'はdeg + 1 long配列を返します。この呼び出しでは、2要素配列が呼び出されます。これをマスクされた配列の1つの要素に割り当てようとしています。なぜ 'trend'はマスクされた配列に初期化されますか? 「トレンド」にどのような価値がありますか? – hpaulj

答えて

0

nynxで作成したときに、ndarrayにはどのタイプを格納するかを指定できます。あなたがゼロの配列の各セルにfloat値(山車度= 1を返すの1×2配列を持つ関数polyfit)の1x2の配列を格納したい場合は、代わりにfloatの次のタイプを選択できます。その後

trend = numpy.zeros((ny,nx), dtype='2f') 

を、 trendの要素として配列を簡単に格納することができます。ndarray

+0

または、それを(ny、nx、2)配列として初期化します。 – hpaulj

関連する問題