我很确定在整数索引方面我漏掉了什么,需要一些帮助。假设我创建了一个二维数组:
>>> import numpy as np
>>> x=np.array(range(24)).reshape((4,6))
>>> x
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
我可以使用以下方法选择第1行和第2行:
>>> x[[1,2],:]
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
或者使用以下方式选定第二行和第三行的第一列:
>>> x[[1,2],1]
array([ 7, 13])
因此,我认为我可以使用以下方式选择第1行和第2行的第3、4和5列:
>>> x[[1,2],[3,4,5]]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
相反,我需要分两步完成:
>>> a=x[[1,2],:]
>>> a
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]])
>>> a[:,[3,4,5]]
array([[ 9, 10, 11],
[15, 16, 17]])
从R语言来的我,我的期望可能是错误的。你能否确认这确实不可能一步完成,或者提供更好的替代方案?谢谢!
编辑:请注意,我在示例中选定的行和列恰巧是连续的,但它们不必连续。换句话说,切片索引对我的情况不起作用。