2015-06-09 5 views
-1

Я пытаюсь создать пустой массив numpy и затем вставить вновь созданные массивы в один. Для меня важно не формировать первый массив numpy, и он должен быть пустым, а затем я могу добавить в него новые массивы numpy с разными размерами. Что-то вроде следующего:Вставить массив numpy в пустой массив numpy

A = numpy.array([]) 
B = numpy.array([1,2,3]) 
C = numpy.array([5,6]) 
A.append(B, axis=0) 
A.append(C, axis=0) 

, и я хочу, чтобы выглядеть следующим образом:

[[1,2,3],[5,6]] 

Когда я делаю команду на добавление я получаю следующую ошибку:

AttributeError: 'numpy.ndarray' object has no attribute 'append' 

Любая идея, как это можно сделать?

PS: Это не похоже на вопросы, заданные ранее, потому что я не пытаюсь объединить два массива numpy. Я пытаюсь вставить массив numpy в другой пустой массив numpy. Я знаю, как это сделать с помощью списков, но это должен быть массив numpy.

Благодаря

+0

Возможный дубликат [** Добавить массив NumPy в массив NumPy **] (http://stackoverflow.com/questions/9775297/append-a-numpy-array-to-a-numpy-array) – mbomb007

+2

Вы уверены, что хотите создать 'numpy.array', как это? Когда каждая строка имеет различное количество столбцов, у вас есть 'numpy.array' типа' object', который теряет большинство прекрасных функций 'numpy'. Для чего-то любит использовать простой python 'list'. – Akavall

+0

Akavail является правильным. Я предположил, что вы хотите получить список python. Если вам нужен массив numpy, это оборванный массив, и вам нужно будет что-то заполнить, например. 'np.nan': array ([[1,2,3], [5,6, nan]]) – rjonnal

ответ

3

Вы не можете сделать это с помощью массивов numpy, потому что реальный 2D-номер является прямоугольным. Например, np.arange(6).reshape(2,3) return array([[0, 1, 2],[3, 4, 5]]). , если вы действительно хотите это сделать, попробуйте array([array([1,2,3]),array([5,6])]), которые создают array([array([1, 2, 3]), array([5, 6])], dtype=object) Но вы потеряете всю мощность numpy с несогласованными данными.

0

Взятые из here. Возможно, сначала найдите существующие вопросы.

numpy.append(M, a) 
+0

Это не работает. 'concatenate' дает массив ([1., 2., 3.]) и' vstack' выдает ошибку из-за неравных размеров. – rjonnal

+0

@rjonnal Затем посмотрите на следующий ответ в связанном вопросе. Этот вопрос является дубликатом. – mbomb007

+0

mbomb007, это не дубликат.Посмотрите на желаемый выход OP. – rjonnal

2

Вы можете сделать это путем преобразования массивов в списки:

In [21]: a = list(A) 
In [22]: a.append(list(B)) 
In [24]: a.append(list(C)) 
In [25]: a 
Out[25]: [[1, 2, 3], [5, 6]] 

Моя интуиция, что есть гораздо лучшее решение (или более вещий или более numpythonic), чем это, что может почерпнуть из более полное описание вашей проблемы.

+0

Нет. Я не хочу использовать списки. Это должно быть много, но спасибо. – ahajib

+0

Кажется, что мне нужно как-то позаботиться о том, чтобы использовать списки, но спасибо за все усилия. – ahajib