2012-03-19 11 views
3

オンザフライでnumpy 2D配列を作成するのに苦労しています。オンザフライでダイナミックな2次元配列を作成する

基本的に私はこのようなforループを持っています。

for ele in huge_list_of_lists: 
    instance = np.array(ele) # creates a 1D numpy array of this list 
# and now I want to append it to a numpy array 
# so basically converting list of lists to array of arrays? 
# i have checked the manual.. and np.append() methods 
that doesnt work as for np.append() it needs two arguments to append it together 

手がかりはありますか?ループしながら

答えて

5

フロントアップの2Dアレイを作成し、行を埋める:create_row()リストまたは長row_lengthの1D numpyの配列を返し

my_array = numpy.empty((len(huge_list_of_lists), row_length)) 
for i, x in enumerate(huge_list_of_lists): 
    my_array[i] = create_row(x) 

create_row()の内容によっては、Pythonループを完全に回避するより優れた方法があるかもしれません。

4

リストのリストをnumpy.arrayに渡すだけで、numpy配列はndarraysであることに注意してください。リストのリストへのコンセプトは2次元配列に変換される配列の配列に変換されません。

>>> import numpy as np 
>>> a = [[1., 2., 3.], [4., 5., 6.]] 
>>> b = np.array(a) 
>>> b 
array([[ 1., 2., 3.], 
     [ 4., 5., 6.]]) 
>>> b.shape 
(2, 3) 

またndarraysがいるND-インデックスので[1][1]はnumpyの中[1, 1]次のようになります。

>>> a[1][1] 
5.0 
>>> b[1, 1] 
5.0 

私はあなたの質問を誤解しましたか?

あなたは挑戦的にこのようなものにnumpy.appendを使用したくありません。 numpy.appendにはO(n)の実行時間があるので、n回呼び出すと、配列の各行に対して1回、O(n^2)アルゴリズムが終了することに注意してください。すべてのコンテンツの内容を知る前に配列を作成する必要があるが、最終的なサイズが分かっている場合は、numpy.zeros(shape, dtype)を使用して配列を作成し、後で入力することをお勧めします。スヴェンの答えに似ています。

2

import numpy as np

ss = np.ndarray(shape=(3,3), dtype=int);

array([[    0, 139911262763080, 139911320845424], 
    [  10771584,  10771584, 139911271110728], 
    [139911320994680, 139911206874808,    80]]) #random 

numpy.ndarray機能は、これを達成します。 numpy.ndarray

関連する問題