索引数组内的数组

时间:2016-03-08 12:42:54

标签: arrays python-2.7 numpy

我在数组中有一个数组。在这种情况下,正常的数组索引无法工作。我可以解决这个问题的一种方法是,我可以将'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

请帮我解决这个问题。

2 个答案:

答案 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的数组中,所以当你访问它的元素时,你需要记住这一点。