2016-12-29 13 views
-1

を追加します。numpyの挿入&Iは、配列持ち

X ndarray 180x360 

X[:,0]が間違った寸法を持っているので、次は

X = numpy.append(X, X[:,0], 1) 

動作しませんが。

これは奇妙なことではありませんか?

問題を回避するこの方法は少し汚れているようだ:MATLABで

X = numpy.append(X, numpy.array(X[:,0],ndmin=2).T, axis=1) 

1だけ書くことができます:X(:,361) = X(:,1) !!!

私も、これが機能することを実現するために来た:APPENDは、同様に動作しない理由を

X = numpy.insert(X, 361, X[:,0], axis=1) 

けど?

はあなたがX[:,0]に新しい軸を作成することができ蛇

答えて

0

ありがとう:

np.append(X, X[:,0,None], axis=1) 

私はあなたが配列の形状と一致する必要が理由はnumpy.appendconcatenateを使用して実装されていることだと思います。

0

理由は、1つの整数でインデックスが削除されていることである軸:1次元配列をだが、

>>> X[:, 0].shape 
(180,) 

あなたはスタートを与え、停止することにより、インデックスあなたは軸続ける場合:

>>> X[:, 0:1].shape 
(180, 1) 

を正しく配列に追加できます。

>>> np.append(a, a[:, 0:1], 1) 
array([....]) 

あなた自身appendingconcatenating多くの配列が警告されます:これらは極度に非効率です。それは例が初めに大きな配列を作成してからちょうどスライスして、行/列を設定するために、これを行う別の方法を見つける方が良いでしょうほとんどの時間:

X = np.zeros((180, 361)) 
X[:, 360] = X[:, 0] # much more efficient than appending or inserting 
0

キー違いは、MATLABのすべてであります少なくとも2つの寸法を有する。

>> size(x(:,1)) 
ans = 
    2 1 

、あなたが注意として、それは超えて-エンド "インデックス付けを可能にする -

>> x(:,10)=x(:,1) 
x = 
    1 2 3 1 0 0 0 0 0 1 
    4 5 6 4 0 0 0 0 0 4 

を超えた。しかしnumpyインデックス内の方法は、2Dの床せずに、寸法を削減:

In [1675]: x = np.ones((3,4),int) 
In [1676]: x.shape 
Out[1676]: (3, 4) 
In [1677]: x[:,0].shape 
Out[1677]: (3,) 

つまり、列を複製したい場合は、それがまだconcatenateの列であることを確認する必要があります。それを行う方法は数多くあります。

x[:,0][:,None] - np.newaxis(エイリアスNone)の使用は便利な汎用方法です。 x[:,[0]]x[:,0:1]x[:,0].reshape(-1,1)もその場所を持っています。

appendは、引数のリストを2に置き換えたちょうどconcatenateです。これは、リストの追加を混乱させる模倣です。経験豊富なMATLABコーダーが読んでいるように、Pythonで書かれています。

insertは、(Pythonでも)より複雑な関数です。両側は(技術的に、彼らはちょうどbroadcastable形状である必要はあり)同じ形状を有しているので、最後の割り当てが機能し

In [1687]: x.shape 
Out[1687]: (3, 4) 
In [1688]: res=np.empty((3,5),int) 
In [1689]: res[:,:4] = x 
In [1690]: res[:,-1] = x[:,0] 

:最後に追加することは次のように行います。したがって、は、concatenateのようなより基本的な操作で何をすべきか、またはすべきではないのかを私たちに教えてくれません。

関連する問題