首页 > 解决方案 > 检查一个数组是否是一个大矩阵的列——Python

问题描述

我的代码需要在每次迭代中检查随机生成的数组是否是大矩阵的一列。代码如下:

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中有没有更有效的方法来处理这个问题?

标签: arrayspython-3.xmatrix

解决方案


对于这个问题,使用素数乘积的唯一性可能是解决问题的好方法。要使用素数,我们需要:

  1. 用于存储素数的数组

  2. 一个数组生成器,可以产生不同类型元素的索引信息(由于数组,在这种情况下,是二进制的,我们只需要知道数组中一种元素的索引。)

  3. 为了解决质数乘积引起的溢出问题,我们需要计算乘积的对数:

代码重写如下:

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

推荐阅读