Python中的尺寸不一致(有时显示1D,有时显示3D)

时间:2018-11-04 06:06:58

标签: python numpy arraylist data-science

我有一个列表,列表中的每个元素都是2D矩阵。

np.shape(mylist)
>>(5000,)

np.shape(mylist[0])
>>(62,62)


type(mylist)
>> list

type(mylist[0])
>> numpy.ndarray

现在,我正在尝试创建一个出现在索引列表中的索引列表:

y_train = [mylist[i] for i in index]

问题是有时显示1D形状,有时显示3D(例如(nx,)或(nx,ny,nz))

例如:

yy = []
yy.append(mylist[17])
yy.append(mylist[1381])

print(np.shape(yy))

>> (2,)

yy = []
yy.append(mylist[17])
yy.append(mylist[1380])

print(np.shape(yy))

>> (2, 513, 513)

知道为什么吗?也许mylist [17]和mylist [1380]具有相同的形状,而mylist [17]和mylist [1381]具有不同的形状呢?

1 个答案:

答案 0 :(得分:0)

首先是两个数组具有不同形状的简单情况:

In [204]: alist = [np.ones((2,3),int), np.zeros((1,3),int)]
In [205]: alist
Out[205]: 
[array([[1, 1, 1],
        [1, 1, 1]]), array([[0, 0, 0]])]
In [206]: len(alist)
Out[206]: 2
In [207]: np.shape(alist)
Out[207]: (2,)
In [208]: alist.shape
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-208-6ab8dc5f9201> in <module>()
----> 1 alist.shape

AttributeError: 'list' object has no attribute 'shape'
In [209]: np.array(alist)
Out[209]: 
array([array([[1, 1, 1],
       [1, 1, 1]]), array([[0, 0, 0]])], dtype=object)

列表中有一个len,但没有一个shapenp.shape首先将输入转换为数组。因此,维度上的差异就是np.array从列表中构造数组的方式上的差异。在这种情况下,它将构造一个object dtype数组。在许多方面,此数组更像是列表,而不是nd数组。

np.array使用两个形状相同的数组创建一个nd数组。

In [210]: alist = [np.ones((2,3),int), np.zeros((2,3),int)]
In [211]: alist
Out[211]: 
[array([[1, 1, 1],
        [1, 1, 1]]), array([[0, 0, 0],
        [0, 0, 0]])]
In [212]: len(alist)
Out[212]: 2
In [213]: np.shape(alist)
Out[213]: (2, 2, 3)
In [214]: np.array(alist)
Out[214]: 
array([[[1, 1, 1],
        [1, 1, 1]],

       [[0, 0, 0],
        [0, 0, 0]]])

alist仍然没有shape属性。