我在数组中有一个数组。在这种情况下,正常的数组索引无法工作。我可以解决这个问题的一种方法是,我可以将'a'转换为列表,然后再将其转换为数组 - 这是一个两步过程,但我想知道是否有任何其他方法可以将其切片以便结构化' ''保持不变?
a=np.array([[np.arange(3)],[np.arange(6,9)],[np.arange(11,14)]])
array([[[ 0, 1, 2]],
[[ 6, 7, 8]],
[[11, 12, 13]]])
a.shape
(3L, 1L, 3L)
a.ndim
3
type(a)
numpy.ndarray
请帮我解决这个问题。
答案 0 :(得分:2)
比较你的2个阵列:
In [39]: a=np.array([[np.arange(3)],[np.arange(6,9)],[np.arange(11,14)]])
In [40]: a1=np.array([np.arange(3),np.arange(6,9),np.arange(11,14)])
In [41]: a
Out[41]:
array([[[ 0, 1, 2]],
[[ 6, 7, 8]],
[[11, 12, 13]]])
In [42]: a.shape
Out[42]: (3, 1, 3) # 3d
In [43]: a1
Out[43]:
array([[ 0, 1, 2],
[ 6, 7, 8],
[11, 12, 13]])
In [44]: a1.shape
Out[44]: (3, 3) # 2d
删除尺寸1尺寸的一种方法是使用squeeze
:
In [45]: np.squeeze(a)
Out[45]:
array([[ 0, 1, 2],
[ 6, 7, 8],
[11, 12, 13]])
或重塑:
In [46]: a.reshape(3,3)
Out[46]:
array([[ 0, 1, 2],
[ 6, 7, 8],
[11, 12, 13]])
您将a
的3个维度与a1
中的2个完全相同:
In [47]: a1[1,:]
Out[47]: array([6, 7, 8]) # index 1 dim of the 2
In [48]: a[1,:]
Out[48]: array([[6, 7, 8]]) # index 1 dim of the 3
In [49]: a[1,0,:]
Out[49]: array([6, 7, 8]) # index 2 dim of the 3
答案 1 :(得分:1)
如果可以的话,也许你有不必要的嵌套级别 像这样初始化你的数组
a=np.array([np.arange(3),np.arange(6,9),np.arange(11,14)])
然后您可以使用标准符号
访问其元素a[1,1]
如果嵌套级别不正确,那么您仍然可以访问 a 的元素,如下所示:
a[1,0,1]
基本上,问题是你将第二级数组包装在另一个维1的数组中,所以当你访问它的元素时,你需要记住这一点。