Python 将numpy中的列表或范围用作行
如何使用numpy中的range来获取区域中的单元格?我可以使用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
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])