我有一个列表,列表中的每个元素都是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]具有不同的形状呢?
答案 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
,但没有一个shape
。 np.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属性。