更多 Numpy Vectorization 而不是使用嵌套循环
More Numpy Vectorization instead of using nested loops
我有 all_data
作为一个 numpy 数组,大小为 (2,601)
、NUM_SAMPLES = 601
和 NUM_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
并改变它的工作方式。
我有 all_data
作为一个 numpy 数组,大小为 (2,601)
、NUM_SAMPLES = 601
和 NUM_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
并改变它的工作方式。