从多维数组中提取特定列

时间:2018-01-16 16:51:11

标签: python arrays slice dimensions

假设我们在Python的形状(1,22,22)中有一个3d numpy数组 - 随机尺寸用于说明。如果我想从Y,Z中提取前2个维度,那么我可以这样做:

new_array = array[:, [0,1], [0,1]] 
new_array.shape
(1, 2)

但是当我尝试通过明确指定前两个维度来做同样的事情时,如:

eval

我得到了不同的结果。为什么?如何选择特定尺寸而不是尺寸范围?

2 个答案:

答案 0 :(得分:0)

将列表传递给numpy数组array[:, [0,1], [0,1]] 使用高级索引而不是切片。请参阅文档here

  

当选择对象obj是非元组序列对象,ndarray(数据类型为integer或bool)或具有至少一个序列对象或ndarray(数据类型为整数或者数组)的元组时,将触发高级索引。布尔)。有两种类型的高级索引:整数和布尔值。

在您的情况下,您正在使用整数数组索引。整数索引链作为单个单元进行广播和迭代。所以使用

(0,0)

选择元素(1,1)read_table来自维度1的第0个和第一个子数组以及第0个和第一个子数组形式维度2。

答案 1 :(得分:0)

我阅读了文档,并使用了我的代码。对于我的问题,唯一似乎有效但但没有的是:

columns = np.array(([0, 1]), ([0,1]), dtype=np.intp)
new_array = my_array[:, columns, 0]

我仍然不太清楚为什么会这样。

编辑:没有按预期工作