python – 创建一个循环,在数据集的所有项目上运行函数(带有数据集索引的参数)?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 创建一个循环,在数据集的所有项目上运行函数(带有数据集索引的参数)?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2158字,纯文字阅读大概需要4分钟。
内容图文
![python – 创建一个循环,在数据集的所有项目上运行函数(带有数据集索引的参数)?](/upload/InfoBanner/zyjiaocheng/722/0a679e762bf8492d806d5322f7cd1e0d.jpg)
所以我有一个功能:
def connection(n,m,r):
is_connected = ((x[n]-x[m])**2 + (y[n]-y[m])**2)**0.5
if is_connected < 2*r:
return n + " " + "connects with" + " " + m
else:
return "no connection"
这基本上看到两个圆圈(坐标对应于索引n和m)是否连接. n和m参数引用数据集x和y中的索引,它们来自numpy.random数组:
array([[ 0.31730234, 0.73662906],
[ 0.54488759, 0.09462212],
[ 0.07500703, 0.36148366],
[ 0.33200281, 0.04550565],
[ 0.3420866 , 0.9425797 ],
[ 0.36115391, 0.16670599],
[ 0.95586938, 0.52599398],
[ 0.13707665, 0.6574444 ],
[ 0.77766138, 0.56875582],
[ 0.79618595, 0.7139309 ]])
由于数组基本上是10组坐标,我已经生成了两个列表,x和y(x是数组的第一列,y是第二列). m和n是这些列表中的索引.因此,n和m对应于数组中的索引,但我不确定如何?
我现在一直在做的是手动输入索引以查看此数组中的任何两个圆是否连接 – 是否有一个-for循环可以更有效地执行此操作?
解决方法:
无论如何,你应该以不同的方式做事.不幸的是,速度快得多的cKDTree没有必要的功能,但即使是其他KDTree也应该给你一个巨大的速度提升(并且更加优雅地解决它)
from scipy.spatial import KDTree
from itertools import chain
tree = KDTree(circles)
# unfortunatly only a list of lists, because there may be a different amount
# also the point itself is included every time.
connections = tree.query_ball_tree(tree, 2*r)
# if all you want is a list of lists of what connects with what
# connections is already what you need. The rest creates a connectivity matrix:
repeats = [len(l) for l in connections]
x_point = np.arange(len(circles)).repeat(repeats)
y_point = np.fromiter(chain(*connections), dtype=np.intp)
# or construct a sparse matrix here instead, scipy.sparse has some graph tools
# maybe it even has a better thing to do this.
connected = np.zeros((len(circles),) * 2, dtype=bool)
connected[x_point, y_point] = True
虽然它不巧妙地使用cKDTree,但这仍然可以节省你的O(N ^ 2)复杂度…当然如果len(圆圈)很小,那没关系,但是你可以只使用广播,(或者distance_matrix from scipy.spatial):
distances = np.sqrt(((circles[:,None,:] - circles)**2).sum(-1))
connected = distances < (2 * r)
# if you need the list of lists/arrays here you can do:
connections = [np.flatnonzero(c) for c in connected]
但请注意,第二种方法是一个记忆饥饿的怪物,只有圆圈很小才有好处.
内容总结
以上是互联网集市为您收集整理的python – 创建一个循环,在数据集的所有项目上运行函数(带有数据集索引的参数)?全部内容,希望文章能够帮你解决python – 创建一个循环,在数据集的所有项目上运行函数(带有数据集索引的参数)?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。