假设我们有两个带有形状的numpy ndarray:
video.shape = (v, h, w, 3)
和
image.shape = (h, w, 3)
我们还有一个形状为img.shape = (h,w)
的数组,它是整数,并告诉我每个位置h,w选择哪个“frame”v。为此,可以使用循环:
for j in range(w):
for i in range(h):
image[i, j, :] = video[img[i, j], i, j, :]
然而,这是非常慢。没有循环可以做到吗?也许将2D坐标重新整形为一个,然后重新塑造它?
答案 0 :(得分:3)
这是一种直截了当的方式
import numpy as np
v, h, w = 40, 50, 60
video = np.random.random((v,h,w,3))
img = np.random.randint(0, v, (h, w))
i, j = img.shape
i, j = np.ogrid[:i, :j]
image = video[img, i, j, :]
# check
for j in range(w):
for i in range(h):
assert np.all(image[i, j, :] == video[img[i, j], i, j, :])