2016-05-12 17 views
-1

私は本当に私の質問があまりにも単純なので、ごめんなさい、あまりによく知られていない。仮定私は、データdata_arrayの1次元配列を持っていると私はarray変数多次元numpy配列のデータを書き込む

for i in range(0,width-1): 
    for j in range(0,height-1): 
     array.append(data_array[i*rows+cols]) 

にデータを入れたい。しかし、APPENDを使用することはできないようです

size = width, height 
array = np.zeros(size, dtype=np.uint8) 

と仮定2D numpy配列を持っていました多次元配列のでこぼこ

+0

静的な配列なので、numpyの配列には全くありません。 –

+0

塗りつぶしと追加は、2つの異なる操作です。サンプルケースを使用し、探しているものを説明します。 – Divakar

+0

@Divakar私は自分の投稿を編集しました。実際には、ループが示唆するように、私はデータを1次元配列( 'data_array')に格納しています。' data_array'の各要素を 'numpy'配列に入れたいです。 – user1611830

答えて

1

のためにあなたは

array=data_array.reshape(width, height) 
0を使用して1次元配列の形を変えることができます

あなたが本当に要素によって2次元配列の要素を構築する必要がある場合は合計サイズがここでそれを行うための基本的な方法だと同じ

+0

ありがとう、この配列のデータに影響する最善の方法は何ですか?私はあなたが何をしたいと思います – user1611830

+0

はあなたのループ内に、次のとおりです。 配列[I、J] =(data_array [私は行+ colsのを*]) ちょうど配列= data_array.reshape(幅、高さ) を実行して、それはループを必要とせずにすべて自動的に行われます – Numlet

0

の場合:

配列([0を生成

size=3,4 
A=np.zeros(size,int) 
for i in range(size[0]): 
    for j in range(size[1]): 
     A[i,j] = i*4 + j # assign elements, don't append 

、1、2、3]、 [4、5、6、7]、 [8、9、10、11])

しかしreshapeで、私は同じことを行うことができ、より高速

In [190]: x=np.arange(12) 

In [191]: x 
Out[191]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) 

In [192]: x.reshape(3,4) # may want to add a .copy() 
Out[192]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 

配列を作成するもう1つの一般的な方法は、リストに追加し、ループの最後に配列にすることです。

In [193]: alist=[]  
In [195]: for i in range(3): 
    .....:  ll = [] 
    .....:  for j in range(4): 
    .....:   ll.append(i*4+j) 
    .....:  alist.append(ll) 
    .....:  

In [196]: alist 
Out[196]: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]] 

In [197]: np.array(alist) 
Out[197]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 

またはコンパクトリスト内包形式で

np.array([[i*4+j for j in range(4)] for i in range(3)]) 

私は配列としてそのj反復処理を行うことができれば、これは速いかもしれない

for i in range(3): 
    alist.append(i*4+np.arange(4)) 

いっそのこと、私たちは両方の寸法、これを行う場合方法

np.arange(3)[:,None]*4 + np.arange(4) 

これは、配列を埋めるための別の方法は、「フラット」バージョンに割り当てることである2列

In [209]: np.arange(3)*4, np.arange(4) 
Out[209]: (array([0, 4, 8]), array([0, 1, 2, 3])) 

の外農産物を作成するために、「放送」を使用しています:あなたはAPPENDを使用してはならない

A.flat[:]=np.arange(1,13) 
関連する問題