我的代码需要检查随机生成的数组是否是每次迭代中的大矩阵的列。代码如下:
large_matrix=np.zeros((arr_size,loop_size))
flag = 0
while flag < loop_size:
arr = arr_generator(arr_size)
dist = np.sum(large_matrix-arr,axis=0)
if 0 in dist:
continue
else:
large_matrix[:,flag] = arr
flag += 1
arr是二进制,因为大_matrix需要大量内存。这段代码非常慢。是否有更有效的方法来处理numpy中的这个问题?
答案 0 :(得分:0)
对于这个问题,使用素数乘积的唯一性可能是解决问题的好方法。要使用素数,我们需要:
用于存储素数的数组
一个数组生成器,它可以生成不同类型元素的索引信息(因为数组,在这种情况下,是二进制的,我们只需要知道数组中一种元素的索引。 )
为了解决由素数乘积引起的溢出问题,我们需要计算产品的对数:
代码重写如下:
PRIME_NUMBER=np.array([2,3,5,7,11,13,17,23,29,31....], dtype='float')
flag = 0
loop_size = 100000
arr_size = 8
config = np.zeros(loop_size)
large_matrix=np.zeros((arr_size,loop_size))
while flag < loop_size:
arr, idx = arr_generator(arr_size)
prod = np.round(np.log10(np.prod(PRIME_NUMBER[idx])), 3)
if prod in config:
continue
else:
large_matrix[:,flag] = arr
flag += 1