优化4d numpy张量切片中的双环

时间:2017-03-27 03:44:09

标签: python arrays numpy multidimensional-array

假设我们有两个带有形状的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坐标重新整形为一个,然后重新塑造它?

1 个答案:

答案 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, :])