python – 查找总和为零的向量集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 查找总和为零的向量集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1687字,纯文字阅读大概需要3分钟。
内容图文
![python – 查找总和为零的向量集](/upload/InfoBanner/zyjiaocheng/795/b87cac66cad442fb92ae7ad0bbae4fb2.jpg)
我有4个数组(set1,set2,…)的3个数组.例如.
set1 = [array([1, 0, 0]), array([-1, 0, 0]), array([0, 1, 0]), ...]
我需要找到多少向量组合总和为零.解决这个问题的简单方法是:
for b1 in set1:
for b2 in set2:
for b3 in set3:
for b4 in set4:
if all(b1 + b2 + b3 + b4 == 0):
count = count + 1
然而,这就像O(n ^ 4),并且基于3sum算法,我假设我可以做O(n ^ 3)并且速度非常重要.有关如何在python中快速完成此任务的任何线索?
解决方法:
假设输入是1D数组的列表,如问题中提供的示例数据中所列,似乎您可以在对行输入列表进行行堆叠后使用broadcasting,如下所示 –
import numpy as np
s1 = np.row_stack((set1))
s2 = np.row_stack((set2))
s3 = np.row_stack((set3))
s4 = np.row_stack((set4))
sums = s4[None,None,None,:,:] + s3[None,None,:,None,:] + s2[None,:,None,None,:] + s1[:,None,None,None,:]
count = (sums.reshape(-1,s1.shape[1])==0).all(1).sum()
样品运行 –
In [319]: set1 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0])]
...: set2 = [np.array([-1, 0, 0]), np.array([-1, 1, 0])]
...: set3 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0])]
...: set4 = [np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0]), np.array([0, 1, 0])]
...:
In [320]: count = 0
...: for b1 in set1:
...: for b2 in set2:
...: for b3 in set3:
...: for b4 in set4:
...: if all(b1 + b2 + b3 + b4 == 0):
...: count = count + 1
...:
In [321]: count
Out[321]: 3
In [322]: s1 = np.row_stack((set1))
...: s2 = np.row_stack((set2))
...: s3 = np.row_stack((set3))
...: s4 = np.row_stack((set4))
...:
...: sums = s4[None,None,None,:,:] + s3[None,None,:,None,:] + s2[None,:,None,None,:] + s1[:,None,None,None,:]
...: count2 = (sums.reshape(-1,s1.shape[1])==0).all(1).sum()
...:
In [323]: count2
Out[323]: 3
内容总结
以上是互联网集市为您收集整理的python – 查找总和为零的向量集全部内容,希望文章能够帮你解决python – 查找总和为零的向量集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】