嵌套循环的向量化

Vectorization on nested loop

我需要向量化以下程序:

y = np.empty((100, 100, 3))  
x = np.empty((300,)) 
for i in xrange(y.shape[0]):
    for j in xrange(y.shape[1]):
        y[i, j, 0] = x[y[i, j, 0]]

当然,在我的例子中,我们假设y[:, :, :]<=299 据我所知,矢量化不能简单地在这里工作,因为我们在列表上使用本机 python 索引 ...

我听说过 np.apply_along_axis,但它不适用于这种特殊情况,或者我是否遗漏了什么?

非常感谢您的帮助。

请注意,您必须将 y 转换为整数类型,因为默认值为浮点型(因此不能用作索引)。但是您不能只执行以下操作吗?

import numpy as np
y = np.empty((100, 100, 3))  
x = np.empty((300,)) 
y[:,:,0] = x[y[:, :, 0].astype(int)]

np.apply_along_axis 可以工作,但是太过分了。

首先,您的嵌套循环方法存在问题。 np.empty,用来定义y,returns一个np.float值的数组,不能用来索引数组。为了解决这个问题,您必须将数组转换为整数,例如y = np.empty((100, 100, 3)).astype(np.int).

完成后,您可以使用 y 进行索引,如下所示:

y = np.empty((100, 100, 3)).astype(np.uint8)
x = np.empty((300,))
y[:,:,0] = x[y[:,:,0]]

当然,y全是0,所以不太清楚这是干什么的。