我有一个形状为 640 x 480 的 numpy 数组:
np.ones((640, 480))
,并且我有行、列的最小、最大范围:
u_min=[497, 157, 493, 137, 567]
v_min=[ 36, 46, 208, 412, 418]
u_max=[502, 162, 498, 142, 572]
v_max=[41, 51 213, 417, 423]
我已经尝试过:
import numpy as np
arr = np.ones((640, 480))
u_min= np.array([497, 157, 493, 137, 567], dtype=np.int32)
u_max= np.array([502, 162, 498, 142, 572], dtype=np.int32)
v_min= np.array([36, 46, 208, 412, 418], dtype=np.int32)
v_max= np.array([41, 51, 213, 417, 423], dtype=np.int32)
rois = arr[u_min:u_max, v_min:v_max]
但我收到错误:
TypeError: only integer scalar arrays can be converted to a scalar index
我想以向量化方式对 numpy 数组进行切片而不循环。你能告诉我该怎么做吗?谢谢
我不认为花哨的索引涵盖了这一点。或者,如果确实如此,那么不是通过简单的切片,而是通过显式索引。因此最有效的方法是
rois = np.stack([a[ul:uh, vl:vh] for ul, uh, vl, vh
in zip(u_min, u_max, v_min, v_max)])
请注意,这仅在您的 ROI 形状相同时才有效。我认为这是故意的。