Python 将numpy中的列表或范围用作行

Python 将numpy中的列表或范围用作行,python,numpy,Python,Numpy,如何使用numpy中的range来获取区域中的单元格?我可以使用from:to,但是否可以使用列表来设置行范围 import numpy as np mx = np.arange(25).reshape(5,5) print(mx) print(mx[1:3, 2:4]) k = 1 print(mx[range(k, k+3), range(k+1, k+5)]) 我不认为您可以这样使用range或arange(尽管请参见),但您可以使用,它使用与range相同的语法(即,您给它一个star

如何使用numpy中的range来获取区域中的单元格?我可以使用
from:to
,但是否可以使用列表来设置行范围

import numpy as np
mx = np.arange(25).reshape(5,5)
print(mx)
print(mx[1:3, 2:4])
k = 1
print(mx[range(k, k+3), range(k+1, k+5)])

我不认为您可以这样使用
range
arange
(尽管请参见),但您可以使用,它使用与range相同的语法(即,您给它一个start、stop和可选的step参数):

这相当于:

mx[k:k+3, k+1:k+5]
例如:

>>> mx[slice(k, k+3), slice(k+1,k+5)]
array([[ 7,  8,  9],
       [12, 13, 14],
       [17, 18, 19]])

>>> mx[k:k+3, k+1:k+5]
array([[ 7,  8,  9],
       [12, 13, 14],
       [17, 18, 19]])

有关更多信息,请参见For
切片
对象

要在索引2d中使用列表或数组,您需要从
广播
的角度考虑:

In [263]: mx = np.arange(25).reshape(5,5)
In [264]: mx[1:3, 2:4]
Out[264]: 
array([[ 7,  8],
       [12, 13]])
In [265]: mx[np.arange(1,3)[:,None], np.arange(2,4)]
Out[265]: 
array([[ 7,  8],
       [12, 13]])
np.ix
使这更容易:

In [266]: np.ix_(np.arange(1,3), np.arange(2,4))
Out[266]: 
(array([[1],
        [2]]), array([[2, 3]]))
In [267]: mx[np.ix_(np.arange(1,3), np.arange(2,4))]
Out[267]: 
array([[ 7,  8],
       [12, 13]])
或者与列表相同:

In [268]: mx[[[1],[2]], [2,3]]
Out[268]: 
array([[ 7,  8],
       [12, 13]])
这是索引第1行和第2行,以及第2列和第3列-在笛卡尔意义上,而不是成对的

In [269]: mx[[1,2], [2,3]]     # diagonal of the block
Out[269]: array([ 7, 13])

实际上,
mx[1:3,2:4]
在这里似乎是最简单的。
In [269]: mx[[1,2], [2,3]]     # diagonal of the block
Out[269]: array([ 7, 13])