从 2D numpy 数组中提取多组行/列
Extracting multiple sets of rows/ columns from a 2D numpy array
我有一个 2D numpy 数组,我想从中提取多组行/列。
# img is 2D array
img = np.arange(25).reshape(5,5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我知道提取一组行/列的语法。下面将提取前4行和第3、4列如下图
img[0:4, 2:4]
array([[ 2, 3],
[ 7, 8],
[12, 13],
[17, 18]])
但是,如果我想提取多组行 and/or 列,语法是什么?我尝试了以下但它导致 invalid syntax
错误
img[[0,2:4],2]
我从上面的命令中寻找的输出是
array([[ 2],
[12],
[17]])
我试着搜索这个,但它只会导致一组行/列的结果或提取我知道如何做的离散行/列,比如使用 np.ix.
就上下文而言,我实际处理的二维数组的尺寸约为 800X1200,我想从该数组中一次提取多个范围的行和列。所以像 img[[0:100, 120:210, 400, 500:600], [1:450, 500:550, 600, 700:950]]
.
IIUC,你可以使用numpy.r_
从切片生成索引:
img[np.r_[0,2:4][:,None],2]
输出:
array([[ 2],
[12],
[17]])
中间体:
np.r_[0,2:4]
# array([0, 2, 3])
np.r_[0,2:4][:,None] # variant: np.c_[np.r_[0,2:4]]
# array([[0],
# [2],
# [3]])
您可以使用 numpy.r_
创建切片:
np.r_[0:2, 4]
# array([0,1,4])
然后可以得到具体的行列如下:
rows = np.r_[0:2, 4]
cols = np.r_[0, 2:4]
img[rows][:, cols]
# array([[ 0, 2, 3],
# [ 5, 7, 8],
# [20, 22, 23]])
我有一个 2D numpy 数组,我想从中提取多组行/列。
# img is 2D array
img = np.arange(25).reshape(5,5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我知道提取一组行/列的语法。下面将提取前4行和第3、4列如下图
img[0:4, 2:4]
array([[ 2, 3],
[ 7, 8],
[12, 13],
[17, 18]])
但是,如果我想提取多组行 and/or 列,语法是什么?我尝试了以下但它导致 invalid syntax
错误
img[[0,2:4],2]
我从上面的命令中寻找的输出是
array([[ 2],
[12],
[17]])
我试着搜索这个,但它只会导致一组行/列的结果或提取我知道如何做的离散行/列,比如使用 np.ix.
就上下文而言,我实际处理的二维数组的尺寸约为 800X1200,我想从该数组中一次提取多个范围的行和列。所以像 img[[0:100, 120:210, 400, 500:600], [1:450, 500:550, 600, 700:950]]
.
IIUC,你可以使用numpy.r_
从切片生成索引:
img[np.r_[0,2:4][:,None],2]
输出:
array([[ 2],
[12],
[17]])
中间体:
np.r_[0,2:4]
# array([0, 2, 3])
np.r_[0,2:4][:,None] # variant: np.c_[np.r_[0,2:4]]
# array([[0],
# [2],
# [3]])
您可以使用 numpy.r_
创建切片:
np.r_[0:2, 4]
# array([0,1,4])
然后可以得到具体的行列如下:
rows = np.r_[0:2, 4]
cols = np.r_[0, 2:4]
img[rows][:, cols]
# array([[ 0, 2, 3],
# [ 5, 7, 8],
# [20, 22, 23]])