使用变量指示索引范围

Bar*_*Cat 15 python arrays multidimensional-array

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

一个简单的案例:

A = [5,6,7,8,9,10]    
b = 2:4  
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情

C = A[b]
Run Code Online (Sandbox Code Playgroud)

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

我想以后这个扩展到多维数组,其中例如,B = [2:4,5:6]和我可以简单地调用A [B],以提取多维数组出A的

EdC*_*ica 19

您可以将其定义bslice实现此目的的对象:

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

Out[9]: [7, 8]
Run Code Online (Sandbox Code Playgroud)

关于你的其他要求,我认为如果你创建一个包含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]])
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 11

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

>>> A = [5,6,7,8,9,10]    
>>> b = slice(2,4)
>>> A[b]
[7, 8]
Run Code Online (Sandbox Code Playgroud)

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

>>> b = np.s_[2:4]
>>> A[b]
[7, 8]
Run Code Online (Sandbox Code Playgroud)

这很好地扩展到例如2d数组:

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