2017-04-18 9 views
0

正しい形状を維持しながら、私のx_配列をxに追加するのが非常に苦労しています。私はvstackを試しましたが、それは私にエラーを与えました。 axis=0はそうでないようなことはしていないようです。次元(:,len(x_))の配列が必要です。Numpy配列を追加して形状を修正する

array([3, 0, 2, 1, 0], dtype=int32) 

Iが試み:

ポストの終わりにコードは、アレイに次の形状のX_与える:

x_ = np.append(x_,np.array([5,4,6,7,8]), axis = 0) 

をしかし与える:編集

array([3, 0, 2, 1, 0, 5, 4, 6, 7, 8]) 

しかし、私はしたいです:

array([[3, 0, 2, 1, 0], 
     [5, 4, 6, 7, 8]]) 

私は(X、X_)vstackしようとしたが、得た:

x = np.vstack(x, x_) 

TypeError: vstack() takes 1 positional argument but 2 were given 

を。

for k in range(2,9): 
    temp_ = (2*k)+1 
    x = np.zeros(shape=(1,temp_)) 
    y = [] 
    for i in range(k, len(number_list)-k-1): 
     newk = k 
     x_ = [] 
     while newk >= -k: 
      x_.append(name[i-newk]) 
      newk-=1 
     le = preprocessing.LabelEncoder() 
     le.fit(x_) 
     x_ = le.transform(x_) 
     x = np.append(x, x_ , axis=0) 
     y.append(residue_area[i]) 
+2

のスペルエラーは、エラーの完全なトレースバックにあなたの質問を更新することはできますか? – Kasramvd

+0

入力データと目的の結果を追加してください。 – greole

+0

リストに追加する方が高速で、エラーが発生しにくいです。しかし、配列を結合する必要がある場合は、基本的な 'np.concatenate'を使用してください。それは正しい配列の形を必要とし、あなたの意図を補うか、第二に推測しようとしません。 – hpaulj

答えて

0

しかし、もしあなたがnp.vstackを使用することができます。

>>> import numpy as np 
>>> x_ = np.array([3, 0, 2, 1, 0]) 
>>> x_ = np.vstack([x_, np.array([5, 4, 6, 7, 8])]) 
>>> x_ 
array([[3, 0, 2, 1, 0], 
     [5, 4, 6, 7, 8]]) 

しかし、(それは本当に非効率的だから)、一般的には、定期的に配列を追加したり、スタックする悪い考えです。多くの場合、それは最終的な形状の配列を作成し、それに挿入すると良いでしょう:

>>> x_ = np.empty((2, 5), dtype=int) 
>>> x_[0] = [3, 0, 2, 1, 0] 
>>> x_[1] = [5, 4, 6, 7, 8] 
>>> x_ 
array([[3, 0, 2, 1, 0], 
     [5, 4, 6, 7, 8]]) 
+0

ありがとう、vstackは私のために働いたが、1つの質問が残っている。特定の形状のゼロ配列を作成することで、ゼロの最初の項目を作成する必要があります。特定の形状の空の配列を作成するにはどうすればよいですか? –

+0

いいえ、空の配列を作成して追加しないでください。私が言ったように、これは非常に非効率的な解決策です(そして、私はひどく非効率的です)。あなたは、通常のリスト '[]'を使って追加することができ、追加を終えた後に配列に変換したり、最終的な形状の空の配列を作成してそれを挿入することができます。 – MSeifert

1

np.appendを廃止しなければなりません。それはあまりにも多くの初心者の考えをひずませる。

np.concatenateおよびすべてのnp.?stackは、最初の引数としてリストをとります。唯一の引数はaxisキーワードです。 np.appendは、そのリストを2つの引数に置き換えることでその慣習を変更します。それはその後、調整され、リストに入れられ、連結を呼び出します。ソースコードを読んでいない限り、最初にディメンションを変更する方法がわからない場合があります。

対話型セッションを引き上げ、np.concatenateで再生すると、ディメンションの一致方法がわかるようになります。次に、この問題を再確認します。

編集:concatenate代わりconcatenante

+0

ありがとうございますが、1つの質問が残っています。特定の形状のゼロ配列を作成することで、ゼロの最初の項目を作成する必要があります。特定の形状の空の配列を作成するにはどうすればよいですか? –

+0

反復的な 'concatenate'ルートに行かなければならない場合、' np.zeros(shape =(0、temp _)) 'で始めることができます。配列を正しく開始することは、なぜ 'np.append'が嫌いなのかの一部です。 '[]'で追加するリストを開始することはよく知られているPythonのイディオムです。 numpyの等価は厄介です。リスト内のすべてのサブ配列を集め、 'concatenate'を1回だけ行うほうがずっと優れています。 – hpaulj

関連する問題