【发布时间】:2020-10-16 11:16:04
【问题描述】:
我是一名初学者,我会感谢任何解决我问题的方法。简单地说,我有两个文件,每个文件包含一个向量。目的是从文件 1 中减去文件 2 的所有元素;对于所有可能的组合。小向量一切都很好,一切都很好,但是对于较大的文件,例如每个文件中有数百万个元素,处理时间很长。
下面给出的是最小的工作示例。我听说过内存映射,如果您能分享修改后的版本或任何相关的指针来处理这个问题,我将不胜感激。
import matplotlib.pyplot as plt
import numpy as np
file1 = np.loadtxt('File_1.txt',delimiter=',')
file2 = np.loadtxt('File_2.txt',delimiter=',')
event1 = file1[:,1]
event2 = file2[:,1]
r1 = len(event1)
r2 = len(event2)
diff = []
for i in range(0,r1):
for j in range(0,r2):
delta = float(event1[i]-event2[j])
if delta >=-4000 and delta <=4000:
diff = np.append(diff, delta)
np.savetxt('export.txt', diff)
【问题讨论】:
-
每个文件中的一百万个元素是 10**12 个组合,如果你只是用蛮力的话。你不能那样做。
-
如果您能分享一个修改后的版本或任何相关的指针来处理这个问题,我将不胜感激。我认为这是题外话。查看代码,文件 IO 甚至是问题吗?如果您的代码涉及大量迭代和追加,则 NumPy 数组可能不是数据结构的合适选择。你做过剖析吗?请参阅How to Ask、help center。
-
嗨,Christain,是的,我无法找到出路,因为我不是编程专家。将不胜感激任何帮助。谢谢!
-
好的,我现在要睡觉了,所以我只是给你一个快速提示。如果明天不能解决这个问题,请输入正确的答案。您需要加载一个文件并对其进行排序。然后对于另一个文件中的每个元素,您可以使用二进制搜索来查找适合您的增量的元素范围。这将是 O(n log n),速度要快得多。
-
您好 AMC,不知道 profiling,现在在 Google 上搜索,您能详细说明一下我可以搜索和学习的关键字吗?
标签: python arrays loops iteration memory-mapped-files