gpt4 book ai didi

python - 如何高效地执行循环语句进行数据分析?

转载 作者:行者123 更新时间:2023-12-01 03:44:30 26 4
gpt4 key购买 nike

我最近编写了这段代码来梳理数据点,它对于小数据集效果很好。然而,每当数据集变得太大时,我得到的都是垃圾输出和 pycharm 控制台中的一条消息,内容为 !需要处理的输出太多。那么最大行输出似乎在 55,000 行左右。

这段代码的目的是分析 file1 中的坐标与 file2 中所有元素的接近程度。然后返回任何共享邻近度的坐标匹配结果。正如您将在下面看到的,我编写了一个嵌套的 for 循环来执行此操作,我理解这可能是一种暴力策略,因此这可能是稍后获取错误消息的问题?

代码如下:

import numpy as np
import math as ma

filename1 = "C:\Users\Justin\Desktop\file1.data"
data1 = np.genfromtxt(filename1,
skip_header=1,
usecols=(0, 1))
#dtype=[
#("x1", "f9"),
#("y1", "f9")])
#print "data1", data1

filename2 = "C:\Users\Justin\Desktop\file2.data"
data2 = np.genfromtxt(filename2,
skip_header=1,
usecols=(0, 1))
#dtype=[
#("x2", "f9"),
#("y2", "f9")])

#print "data2",data2

def d(a,b):
d = ma.acos(ma.sin(ma.radians(a[1]))*ma.sin(ma.radians(b[1]))
+ma.cos(ma.radians(a[1]))*ma.cos(ma.radians(b[1]))* (ma.cos(ma.radians((a[0]-b[0])))))
return d

results = open("results.txt", "w")

for coor1 in data1:
for coor2 in data2:
n=0
a = [coor1[0], coor1[1]]
b = [coor2[0], coor2[1]]
#print "a", a
#print "b", b

if d(a, b) < 0.07865: # if true what happens
results.write("\t".join([str(coor1), str(coor2), "True", str(d)]) + "\n")

else:
results.write("\t".join([str(coor1), str(coor2), "False", str(d)]) + "\n")
results.close()

理想情况下,当我开始交叉检查每个超过 500,000 个坐标的数据文件时,我不会遇到此问题,因为我怀疑其中许多文件是否会共享很大的接近度。

但是发布此内容有两个原因(同样是这样)。首先,与任何可以使用它的人分享此代码,因为它已经被证明是分析任意球形空间中的数据或坐标的强大工具。其次,看看是否有人对如何提高效率并帮助我解决错误消息有任何建议?

最具体地说,当我的邻近限制是大量分离以及读取元素“a”和“b”时,会出现错误消息。

我真的怀疑 pycharm 在处理超过 55,000 行输出时存在问题,但我不知道...我的猜测是我要么搞砸了代码,要么可能是 Windows 10 问题?

预先感谢您的帮助。我对此很陌生,所以任何建议肯定会有用。

最佳答案

正如 dblclik 在对该帖子的评论中提到的那样,当然有一些方法可以使您的代码更加高效,避免嵌套 for 循环的完整计算。但是,我认为这不会帮助您解决您收到的错误消息:

我不认为 PyCharm 在处理您提到的 n 行代码时存在问题,我相当怀疑,这是事实,您正在打印,即输出,你们所有人输出到 PyCharm,尤其是在打印不太近的 x y 的距离时需要内存。

我建议您不要打印结果,而是尝试将其保存到 .txt 文件或距离矩阵中。通过这种方式,您还可以保存计算的输出!

示例:将结果保存到列表

results = []
...
for coor1 in data1:
for coor2 in data2:
distance = d(a, b)
if distance < thresh:
results.append((str(coor1), str(coor2), "True", str(distance)))

else:
results.append((str(coor1), str(coor2), "False", str(distance)))

示例:保存到文本文件

results = open("results.txt", "w")
...
for coor1 in data1:
for coor2 in data2:
distance = d(a, b)
if distance < thresh:

results.write("\t".join([str(coor1), str(coor2), "True", str(distance)])+"\n")

else:
results.write("\t".join([str(coor1), str(coor2), "False", str(distance)])+"\n")
results.close()

我希望这个方法能帮助你完全运行你的脚本!

关于python - 如何高效地执行循环语句进行数据分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39153448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com