使用变量指示索引范围

时间:2018-02-07 10:49:19

标签: python arrays multidimensional-array

我想创建一个包含索引的列表,这些索引将用于从另一个列表中获取元素。

一个简单的案例:

A = [5,6,7,8,9,10]    
b = 2:4  

我想做一些像

这样的事情
C = A[b]

这就像说C = A [2:4]

我想稍后将其扩展到多维数组,例如b = [2:4,5:6],我可以简单地调用A [b]从A中提取多维数组。

2 个答案:

答案 0 :(得分:19)

您可以将b定义为slice对象来实现此目的:

In[9]:
A = [5,6,7,8,9,10]    
b = slice(2,4)
A[b]

Out[9]: [7, 8]

关于你的其他要求,我认为如果你创建一个包含2个slice个对象的列表对象,那么它应该达到你想要的效果:

In[18]:
import numpy as np
a = np.arange(100).reshape(10,10)
b = [slice(1,3), slice(3,4)]
a[b]

Out[18]: 
array([[13],
       [23]])

答案 1 :(得分:11)

您可以使用例如直接python切片:

>>> A = [5,6,7,8,9,10]    
>>> b = slice(2,4)
>>> A[b]
[7, 8]

但这并不能很好地扩展到nd-arrays。要做到这一点,我建议使用numpy的np.s_函数,该函数完全符合您的要求,而无需为每个轴明确构造slice

>>> b = np.s_[2:4]
>>> A[b]
[7, 8]

这很好地延伸到例如2d阵列:

>>> A = np.ones(10, 10)
>>> b = np.s_[2:4, 5:6]
>>> A[b]
array([[ 1.],
       [ 1.]])