【发布时间】:2021-03-03 08:40:14
【问题描述】:
我尝试在 Python 中优化以下算法:
我事先定义了三个逻辑矩阵(X、Y 和 Z)。每个都有 N 列。我还定义了两个非常大的数字 N 和 A,以及一个名为 tot_list 的任意数字数组,其长度为 A。我想遍历 X、Y 和 Z,找到每个元素的元素为 1 的位置,然后更改它列表 A_list 中的对应值到随机浮点数。完成此操作后,我将 tot_list 更新为 A_list。下面是实际代码:
for i in range(0,N):
A_list = np.ones([1,A])
A_list[0][np.where(X[:,i]==1)[0]] = np.random.random()
A_list[0][np.where(Y[:,i]==1)[0]] = np.random.random()
A_list[0][np.where(Z[:,i]==1)[0]] = np.random.random()
tot_list = tot_list+A_list
上面给出的代码完全符合我的要求,但运行速度非常慢。我必须处理巨大的数字(即,A 大约为 10^6,N 大约为 10^2),并且我必须尽可能优化上述内容。我已经尝试过摆脱 for 循环,但我不确定如何实现这一点。欢迎提出任何建议。
【问题讨论】:
-
也许您可以提供一些小样本输入和预期输出?看起来你可以检查每一列,例如一次
X,如果任何一行包含1,然后填充随机数? -
@tomjn 不幸的是,我认为我做不到。矩阵只是非常大的逻辑矩阵,输出 (tot_list) 将是一个对于此计算不重要的数字。
标签: python arrays numpy optimization