嵌套循环的向量化
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,所以不太清楚这是干什么的。
我需要向量化以下程序:
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,所以不太清楚这是干什么的。