Если вам действительно нужно построить 2d элемент массива элементом здесь основной способ сделать это:
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
производства
массив ([[0 , 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]])
Другим распространенным способом построения массива является добавление в список и преобразование его в массив в конце циклов.
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]))
Другой способ заполнить массив, чтобы присвоить «плоский» версии:
A.flat[:]=np.arange(1,13)
Вы не должны использовать Append на множестве numpy, потому что они статичны. –
Заполнение и добавление двух операций. Используйте примерный пример и объясните, что вы ищете? – Divakar
@ Divakar Я отредактировал мое сообщение. На самом деле, как предполагает цикл, у меня есть данные, хранящиеся в массиве 1d ('data_array'), я хочу поместить каждый из элементов' data_array' в массив 'numpy' – user1611830