numpy中有没有函数,返回两个向量之间的部分:例:假设此表显示数组| | | || - ------|- ------|- ------|| 1个|第二章|三个|| 四个|五个|六个|| 七|八个|九|像array[(0,1):(2,3)]将返回| | || - ------|- ------|| 第二章|三个|| 五个|六个|其中两个端点是在范围中指定的向量。(0,1)是最上端,(2,3)是右下端。向量的大小和矩阵的形状都是未知的。
yhqotfr81#
在(0, 1)中,0指行,1指列。在(2, 3)中,2指行,3指列。你不能直接使用(0, 1)和(2, 3),但是认识到上面的内容,你可以把它们转换成切片,你也可以把切片的元组传递给数组索引器,它将使用沿着i轴的i切片。
(0, 1)
0
1
(2, 3)
2
3
i
def special_slice(array, topleft, bottomright): slices = tuple(slice(tl, br) for tl, br in zip(topleft, bottomright)) return array[slices] a = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) b = special_slice(a, (0, 1), (2, 3)) # array([[2., 3.], # [5., 6.]])
lfapxunr2#
您可以使用常规下标。范围值只需按行和列的起始/终止对分组即可:
import numpy as np x= np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) top = (0,1) bottom = (2,3) r0,c0,r1,c1 = *top,*bottom y = x[r0:r1,c0:c1] print(y) [[2. 3.] [5. 6.]]
如果矩阵中的维数可变,可以使用itertools中的starmap将坐标转换为切片以进行下标:
from itertools import starmap y = x[(*starmap(slice,zip(top,bottom)),)]
2条答案
按热度按时间yhqotfr81#
在
(0, 1)
中,0
指行,1
指列。在
(2, 3)
中,2
指行,3
指列。你不能直接使用
(0, 1)
和(2, 3)
,但是认识到上面的内容,你可以把它们转换成切片,你也可以把切片的元组传递给数组索引器,它将使用沿着i
轴的i
切片。lfapxunr2#
您可以使用常规下标。范围值只需按行和列的起始/终止对分组即可:
如果矩阵中的维数可变,可以使用itertools中的starmap将坐标转换为切片以进行下标: