2016-10-29 5 views
1

У меня есть два массива numpy массивов (A и B). Они смотрят что-то вроде этого, когда напечатано:Массив numpy массивов numpy имеет 1D-форму

A:

[array([0, 0, 0]) array([0, 0, 0]) array([1, 0, 0]) array([0, 0, 0]) 
array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) 
array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 1]) array([0, 0, 0]) 
array([1, 0, 0]) array([0, 0, 1]) array([0, 0, 0]) array([0, 0, 0]) 
array([0, 0, 0]) array([1, 0, 0]) array([0, 0, 1]) array([0, 0, 0])] 

B:

[[ 4.302135e-01 4.320091e-01 4.302135e-01 4.302135e-01 
    1.172584e+08] 
[ 4.097128e-01 4.097128e-01 4.077675e-01 4.077675e-01 
    4.397120e+07] 
[ 3.796353e-01 3.796353e-01 3.778396e-01 3.778396e-01 
    2.643200e+07] 
[ 3.871173e-01 3.890626e-01 3.871173e-01 3.871173e-01 
    2.161040e+07] 
[ 3.984899e-01 4.002856e-01 3.984899e-01 3.984899e-01 
    1.836240e+07] 
[ 4.227315e-01 4.246768e-01 4.227315e-01 4.227315e-01 
    1.215760e+07] 
[ 4.433817e-01 4.451774e-01 4.433817e-01 4.433817e-01 
    9.340800e+06] 
[ 4.620867e-01 4.638823e-01 4.620867e-01 4.620867e-01 
    1.173760e+07]] 

type(A), type(A[0]), type(B), type(B[0]) являются все <class 'numpy.ndarray'>.

Однако A.shape является (20,), а B.shape - (8, 5).

Вопрос 1: Почему A.shape одномерный, и как сделать его двумерным, как B.shape? Они оба массивы массивов, не так ли?

Вопрос 2, возможно, связано с Q1: Почему печать A показать вызовы array(), при печати B не делает, и почему элементы подмассивов из B не запятые в-между ними?

Заранее спасибо.

+1

Вы смотрели на 'dtype' каждого массива? Один из них представляет собой массив массивов, другой - 2D-массив поплавков. – Evert

+0

Это мой вопрос - как мне сделать массив массивов в 2D-массив ints/floats? –

ответ

2

A.dtype является O, объект, B.dtype является float.

A - это 1-й массив, содержащий объекты, которые являются массивами. Они также могут быть списками или Нет.

B - это 2-й массив поплавков. Индексирование одной строки B дает 1-й массив.

Пробег: np.concatenate(A), или np.vstack(A). Оба они обрабатывают A как список массивов и присоединяют их либо к 1, либо к 2d.

Преобразование массивов объектов в обычное время происходит довольно часто.

Converting a 3D List to a 3D NumPy array является немного более общим, что вам нужно, но дает много полезной информации.

также

Convert a numpy array of lists to a numpy array

==================

In [28]: A=np.empty((5,),object) 
In [31]: A 
Out[31]: array([None, None, None, None, None], dtype=object) 
In [32]: for i in range(5):A[i]=np.zeros((3,),int) 
In [33]: A 
Out[33]: 
array([array([0, 0, 0]), array([0, 0, 0]), array([0, 0, 0]), 
     array([0, 0, 0]), array([0, 0, 0])], dtype=object) 
In [34]: print(A) 
[array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) array([0, 0, 0]) 
array([0, 0, 0])] 
In [35]: np.vstack(A) 
Out[35]: 
array([[0, 0, 0], 
     [0, 0, 0], 
     [0, 0, 0], 
     [0, 0, 0], 
     [0, 0, 0]]) 
+0

Да, я пропустил этот ответ ... Спасибо! –

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