arrays - 检查一个数组是否是一个大矩阵的列——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中有没有更有效的方法来处理这个问题?
解决方案
对于这个问题,使用素数乘积的唯一性可能是解决问题的好方法。要使用素数,我们需要:
用于存储素数的数组
一个数组生成器,可以产生不同类型元素的索引信息(由于数组,在这种情况下,是二进制的,我们只需要知道数组中一种元素的索引。)
为了解决质数乘积引起的溢出问题,我们需要计算乘积的对数:
代码重写如下:
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
推荐阅读
- php - OAuth2/REST : 使用另一个项目的令牌保护项目的 API
- ios13 - 如何将子视图添加到 UIWindow 场景 iOS 13
- apache-spark - 如何从火花将镶木地板写入minio?
- python - 张量中第二个重复元素的掩码
- performance - 当你有一个 AMD CPU 时,你能加速使用 Intel-MKL 的代码吗?
- c# - 为什么即使 Directory.Exists 返回 true,它也会抛出 DirectoryNotFoundException?
- php - 在 Google App Engine (GAE) 上部署时无法识别 app.user
- json - 尝试将 JSON 结构上传到 Firebase 网络
- html - minmax() 忽略最小值并拉伸 div 以适应父高度
- ios - 在标签上添加 UITapGestureRcognizer 后 TTTAttributedLabel 链接不可点击