假设我们在Python的形状(1,22,22)中有一个3d numpy数组 - 随机尺寸用于说明。如果我想从Y,Z中提取前2个维度,那么我可以这样做:
new_array = array[:, [0,1], [0,1]]
new_array.shape
(1, 2)
但是当我尝试通过明确指定前两个维度来做同样的事情时,如:
eval
我得到了不同的结果。为什么?如何选择特定尺寸而不是尺寸范围?
答案 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]
我仍然不太清楚为什么会这样。
编辑:没有按预期工作