2016-03-24 21 views
0

Pythonでは、n-by-100の行列を作成したいと考えています。最初はnの値が不明です。この作成には、行列を連続的に追加する必要があります。私はこれを試みたコードは次のとおりNumPy配列に行を追加する

x = numpy.zeros(100) 
while true: 
    y = loadrow(); # Load a 1-by-100 NumPy array for the new row 
    x = numpy.append(x, y, 0) 

しかし、私は困難解決を有してい上記と3つの問題がある:

  1. ラインx = numpy.zeros(100)が列を有するマトリックスを初期化100個のゼロ。しかし、最初の行を最初にロードする必要があります。最初の行を追加した後にデータが与えられる空行列を作成するにはどうすればよいですか?

  2. x = numpy.append(x, y, 0)は、行列xに別の行を追加しません。代わりに、最初の行の末尾にyを追加するだけで、さらに長い行が作成されます。しかし、私がx = numpy.append(x, y, 1)を試してみたら、軸1に追加すると、エラーが発生します:TypeError: Required argument 'object' (pos 1) not found

  3. このような行を続けて追加すると、元の配列のコピーが作成されているように見えますが、配列が大きくなると非効率になります。最終的なアレイのサイズがわからないときにこれを行う他の方法はありますか?

ありがとうございます!

+0

を追加(http://stackoverflow.com/questions/35818395/add-a-column- [ここ]同様の質問に対する私の答えを参照してください。 in-a-numpy-array-python/35828879#35828879)。 – bunji

+1

リストの使用を検討し、ループの後にnumpy配列に変換してください。 – Evert

答えて

3

あなたはここにnp.appendを使用する必要がある場合

In [96]: arr=np.zeros((0,5),int) 

In [97]: for i in range(3): 
    arr=np.append(arr,np.arange(i,i+5).reshape(1,5),0) 
    ....:  

In [98]: arr 
Out[98]: 
array([[0, 1, 2, 3, 4], 
     [1, 2, 3, 4, 5], 
     [2, 3, 4, 5, 6]]) 

率直に言って、私はappendを好きではない、それを行う方法です。人々はそれをリストの追加と混同します(あなたはそうしませんでした)、人々は次元を理解しませんし、毎回配列を再構築します。

コードを見てください - それは何を参照してください?またvstackhstack

return concatenate((arr, values), axis=axis) 

ルック。 dstackなど

しかし、いっそのこと、使用リストは

In [100]: alist=[] 

In [101]: for i in range(3): 
    alist.append(np.arange(i,i+5).reshape(1,5)) 
    .....:  

In [102]: np.concatenate(alist,axis=0) 
Out[102]: 
array([[0, 1, 2, 3, 4], 
     [1, 2, 3, 4, 5], 
     [2, 3, 4, 5, 6]]) 
関連する問題