更多 Numpy Vectorization 而不是使用嵌套循环

More Numpy Vectorization instead of using nested loops

我有 all_data 作为一个 numpy 数组,大小为 (2,601)NUM_SAMPLES = 601NUM_CLUSTERS = 3。 是否有任何矢量形式可以构建 f(一个 (601,9) numpy 数组)而不是使用嵌套 for 循环,如下所示?

f = np.empty((0,9), float)
for n in range(NUM_SAMPLES):
    f_n = np.array([[]])
    for m in range(NUM_CLUSTERS):
        f_n = np.hstack( (f_n , z_i(alldata[:,n], m).T))
    f = np.concatenate((f, f_n) , axis=0)

注意 : 当调用函数 z_i(alldata[:,n], m) 时,它 returns 一个 (3,1) numpy 数组。

f 应该是 'F' 在下面的公式中: formula of f

因为在循环中间有一些函数 z_i,所以您或多或少会陷入循环。你不需要像你现在做的那样做一堆非常低效的连接,但是你的数组大小太小了可能无关紧要。

f = np.vstack((np.hstack((z_i(alldata[:,n], m).T for m in range(NUM_CLUSTERS)))
               for n in range(NUM_SAMPLES)))

如果您真的想让它 运行 更快,您必须研究 z_i 并改变它的工作方式。