2012-03-19 2 views
3

Мне сложно создавать 2D-массив размером numpy на лету.Создайте динамический 2D-массив numpy на лету

Так что в принципе у меня есть цикл для чего-то вроде этого.

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 массива фронт, и заполнить строки в то время как цикл:

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() возвращает список или 1D NumPy массив длины row_length.

В зависимости от того, что делает create_row(), могут быть даже лучшие подходы, которые полностью исключают петлю Python.

4

Просто передайте список списков numpy.array, иметь в виду, что Numpy массивы ndarrays, поэтому концепция в список списков не приводит к массивам массивов это приводит к 2d массива.

>>> 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 имеют ИАГ-индексирование так [1][1] становится [1, 1] в NumPy:

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

ли я неправильно ваш вопрос?

Вы вызывающе не хотите использовать numpy.append для чего-то вроде этого. Имейте в виду, что numpy.append имеет время выполнения O (n), поэтому, если вы вызываете его n раз, один раз для каждой строки вашего массива, вы получаете алгоритм 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

Смежные вопросы