2017-11-02 3 views
0

別のバージョンのscipyでappendの機能に関して質問があります。私がPython 2.7.3とscipy 0.10.1(numpy1.6.2)で以下のスクリプトを使用しても、すべてうまくいきます。別のバージョンのscipyで使用されている

a=(1,2,3);b=(4,5,6);append(a,b,1);array([1,2,3,4,5,6]) 
a=[];b=(4,5,6);append(a,b,1);array([4,5,6]) 

しかし、私はpython2.7とscipy1.0.0(numpyの1.13.3)でこれらを実行する場合:

a=(1,2,3);b=(4,5,6);append(a,b,1); 
a=[];b=(4,5,6);append(a,b,1); 

トレースバック(最新の呼び出しの最後):

File "", line 1, in File "/usr/local/lib/python2.7/site-packages/numpy/lib/function_base.py" , line 5152, in append return concatenate((arr, values), axis=axis) numpy.core._internal.AxisError: axis 1 is out of bounds for array of dimension 1

しかし、私はfunction_base.pyでappendの機能をチェックしましたが、両方のnumpyで同じです。あなたはなぜこれが起こるのか知っていますか?

もう1つの質問は、私がpython2.7を使用している場合、python2.6の下にインストールされた古いバージョンのscipy/numpyを使用することが可能であるということですか?

ありがとうございます。

+0

コードをフォーマットしてください – yash

+0

Pythonには、リスト 'append' **メソッド**があります。 'numpy'は' append' **機能を持っています**。あなたが 'numpy as np'をインポートすると、それを' np.append'として使います。しかし、あなたはそれを使うべきではありません。必要に応じて配列の大きさを調整して 'np.concatenate'を使うことを学ぶべきです。 – hpaulj

答えて

0

フォーマットがオフになっているが、ここであなたが

a=(1,2,3) 
b=(4,5,6) 
append(a,b,1) 
# array([1,2,3,4,5,6]) 

abはタプルです何をすべきかに関して、私の推測です。

私はnp.append機能を使用する場合:axis=0

In [566]: np.append(a,b) 
Out[566]: array([1, 2, 3, 4, 5, 6]) 

をこれも動作します。 axis=1aには次元が1つしかないため、エラーが発生します。 np.appendの古いバージョンがaxis=1と動作する場合は、バグがあり、axisパラメータが無視されているためです。 (より新しいバージョンが正しいです;あなたはaxis=1を許可するためだけに古いバージョンを使用しようとすべきではありません)

私はimport numpy as npではなくfrom numpy import *を使用します。そうすれば、私はnumpyの機能を使うと明らかです。 (numpyはscipyの基礎もしています)。

私たちが本当にやるべきことは次のとおりです。

In [569]: np.concatenate((a,b)) 
Out[569]: array([1, 2, 3, 4, 5, 6]) 

これは新しい配列を作るために、1D配列にabの両方をオンして、唯一の軸に沿ってそれらを結合します。 aは、この空のリストである場合

同じことが動作します:

a=[] 
b=(4,5,6) 
append(a,b,1) 
# array([4,5,6]) 

このaはリストであり、かつappend方法

In [570]: a=[] 
In [571]: a.append(b) 
In [572]: a 
Out[572]: [(4, 5, 6)] 

extendを持っている:

In [573]: a=[] 
In [574]: a.extend(b) 
In [575]: a 
Out[575]: [4, 5, 6] 

から離れる。初心者はいつも混乱しています。リストの付いたスティックとnp.concatenate

np.appendおよびnp.stackは、配列(またはリスト)の結合にも役立ちます。

繰り返し配列を作成するとき、それはリストに追加し、最後に配列を作るのがベストです:

alist = [] 
for i in range(5): 
    alist.append(i) 
arr = np.array(alist) 

繰り返しリストはappendは良い習慣です。反復配列の連結は遅くなります。

関連する問題