【发布时间】:2017-01-08 04:58:15
【问题描述】:
假设一个多维数组
import numpy as np
foo = np.random.rand(102,43,35,51)
我知道最后这些维度代表一个二维空间 (35,51) 假设我想要第 0 列的第 8 到 30 行 根据我对索引的理解,我应该调用
foo[0][0][8::30][0]
虽然知道我的数据(与此处使用的随机数据不同),但这不是我所期望的
我可以试试这个确实有效,但看起来很荒谬
foo[0][0][[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],0]
现在我可以在this documentation 中找到我也可以使用 类似:
foo[0][0][[8,30],0]
它只给了我第 8 行和第 30 行的值 而这:
foo[0][0][[8::30],0]
报错
File "<ipython-input-568-cc49fe1424d1>", line 1
foo[0][0][[8::30],0]
^
SyntaxError: invalid syntax
我不明白为什么 :: 参数不能在这里传递。那么在索引语法中指示范围的方法是什么?
所以我想我的总体问题是什么是这种语法的正确 pythonic 等价物:
foo[0][0][[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],0]
【问题讨论】:
-
不清楚你想用
foo[0][0][[8::30],0]完成什么。foo[0][0][8::30][0]怎么样? -
你试过
foo[0, 0, 8:30, 0]吗? -
还要注意
::是扩展切片语法的一部分,无需一直称其为“花式索引”。:)stackoverflow.com/questions/509211/… -
@OphirCarmi 这确实有效!
-
@MattBall 试过 foo[0][0][8::30][0] 但我得到的似乎不是我所期望的。从我的数据集的值来看,结果似乎是一个行切片
标签: arrays python-2.7 numpy indexing slice