【发布时间】:2020-07-02 10:01:02
【问题描述】:
对于机器学习项目,我生成随机矩阵。一个尚不存在的新矩阵存储在一个数组中。如果创建的矩阵已经存在,则不应添加。到目前为止,我使用循环和 numpy 的 allclose 函数来将数组中的每个矩阵与实际创建的随机矩阵进行比较。但是我需要 500000 个矩阵,而他的代码会花费相应的时间。 您知道将矩阵与数组中的每个矩阵进行比较的更好解决方案吗? 如果有任何帮助,我将不胜感激。 这是我的实际代码:
import numpy as np
a_total = np.zeros((1,3,3))
while j < 500000:
atol = 1e-06
h = 0
a_add = np.random.rand(3,3).reshape(1,3,3)
for y in range(a_total.shape[0]):
mask = np.allclose(a_total[y], a_add, atol)
if mask == False:
h+=1
if (h==a_total.shape(0)):
a_total = np.concatenate((a_total, a_add), axis=0)
j=+1
【问题讨论】:
-
一个建议是在完整的元素检查之前使用不太严格的检查,例如,只检查矩阵的第一个元素的相等性(直到一个容差),并且只有当它不同时, 执行完整的元素检查以确保所有元素在附加之前都不同
-
如果这是用于某种蒙特卡罗模拟,但我确实想知道为什么您会摆脱与早期场景相同的场景,因为这会改变您尝试模拟的过程的统计属性- 我知道这不是你的问题,所以只是一个想法......
-
在您的代码中添加一个变量 'a = 8.0000001'。生成矩阵后,计算矩阵之和。然后将矩阵的任何一个元素更改为“a-sum”。然后将 a 递增为 'a+=0.00000001' 并继续。这样,您的所有矩阵都将是唯一的。根据矩阵的数量,您可以在 8.00000001 中添加更多或更少的零.....
-
确保您使用的是 float64 值
标签: python arrays numpy matrix data-generation