Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy内存错误_Python_Arrays_Numpy - Fatal编程技术网

Python Numpy内存错误

Python Numpy内存错误,python,arrays,numpy,Python,Arrays,Numpy,我试图比较两个MD5哈希列表并确定匹配项。其中一个列表包含大约34000000个哈希,另一个列表最多可以包含1000000个哈希 使用我一直在试验的Numpy,与标准python数组进行比较所需的时间非常长,性能差异非常显著。我使用的实验性散列数据集每个仅包含1000000,但当我尝试模拟34000的目标数据集时,python脚本返回以下错误: process started - [2017-01-01 11:23:18] Traceback (most recent call last): F

我试图比较两个MD5哈希列表并确定匹配项。其中一个列表包含大约34000000个哈希,另一个列表最多可以包含1000000个哈希

使用我一直在试验的Numpy,与标准python数组进行比较所需的时间非常长,性能差异非常显著。我使用的实验性散列数据集每个仅包含1000000,但当我尝试模拟34000的目标数据集时,python脚本返回以下错误:

process started - [2017-01-01 11:23:18]
Traceback (most recent call last):
File "compare_data.py", line 30, in <module>
compare_array_to_array()
File "compare_data.py", line 24, in compare_array_to_array
np_array_01 = read_sample_data_01_array()
File "compare_data.py", line 9, in read_sample_data_01_array
np_array_01 = np.array(sample_data_01)
MemoryError
当前运行此代码的工作站是32位的,就像Python一样,也就是说Ubuntu可以看到8GB的RAM,尽管我怀疑其中只有4个是可寻址的?目标工作站包含64GB的RAM,是一个64位的系统,但我想满足较小的系统

下面是我试图比较的数据集中包含的字符串示例:

XDPUXSRCYCYTYEUPQMGXEDPHQTDOCLEK
FPNXWZTALSZULLWLPCMTGTAKIGMCAMFT
NKIOLIINPXBMUUOLYKWWBCIXCIVKWCPO
DPLIXJCFJOKLSZUSRPPBDBAADXEHEDZL
NGIMMXKXZHIQHTCXRPKGWYPUPJMAJAPQ
非常感谢这一例行程序:

def read_sample_data_01_array():
    sample_data_01 = []
    with open("data_set_01.txt", "r") as fi: #34,000,000 hashes
        for line in fi:
            sample_data_01.append(line)
    np_array_01 = np.array(sample_data_01)
    return(np_array_01)
首先创建一个本地python列表,然后用它创建一个
numpy
数组。在某些情况下,您需要的内存大约是最终所需内存的两倍,这可能解释了内存不足的原因

您可以使用
numpy.loadtxt
直接读取该文件,但我怀疑它需要相同的内存量,因为它会自动计算数据大小,因此我的解决方案是:使用
fromiter
并使用该例程将数据类型指定为
“:

def read_sample_data_01_array():
    sample_data_01 = []
    with open("data_set_01.txt", "r") as fi: #34,000,000 hashes
        for line in fi:
            sample_data_01.append(line)
    np_array_01 = np.array(sample_data_01)
    return(np_array_01)
首先创建一个本地python列表,然后用它创建一个
numpy
数组。在某个点上,您需要的内存大约是最终所需内存的两倍,这可能解释了内存不足的原因


您可以使用
numpy.loadtxt
直接读取该文件,但我怀疑它需要相同的内存量,因为它会自动计算数据大小,所以我的解决方案是:使用
fromiter
并将数据类型指定为
“我已经回答了,但现在有一个疑问。你们可以发布一个输入文件的示例吗?当然,我编写了一个脚本来生成32个字符串,这些字符串与我模拟MD5哈希的结果非常接近:我已经回答了,但我现在有一个疑问。您可以发布输入文件的示例吗?当然,我编写了一个脚本来生成32个字符串,这些字符串与我模拟MD5哈希的结果非常接近:恐怕您的解决方案返回了内存错误:由于您的编辑,我可以调整我的解决方案。应该是更好的记忆。请尝试。我已经尝试了您的更改,现在收到错误:MemoryError:无法分配数组内存。错误似乎与这一行代码有关:array=np.fromiter((line.strip()表示f中的行),dtype=“请参阅我的编辑,我认为最后一个解决方案将适用于您。请注意!18秒看起来可以进行比较。这在我的书中给人留下深刻印象,非常感谢:)恐怕您的解决方案返回了一个内存错误:由于您的编辑,我可以调整我的解决方案。在内存方面应该更好。请尝试。我已经尝试了您的更改,现在收到错误:MemoryError:无法分配数组内存。错误似乎与以下代码行有关:array=np.fromiter((line.strip()表示f中的行),dtype=“请参阅我的编辑,我认为最后一个解决方案对您有效。请注意!18秒后,它看起来可以进行比较。这在我的书中给人留下深刻印象,因此非常感谢:)
def read_sample_data_array(filepath):
   with open(filepath) as f:
    array = np.fromiter((line.strip() for line in f),dtype="<U32")
   return array
np_array_02 = read_sample_data_array("data_set_02.txt")
np_array_01 = read_sample_data_array("data_set_01.txt")
with open("data_set_02.txt", "r") as fi: #1,000,000 hashes
    s = {line.strip() for line in fi}

with open("data_set_01.txt", "r") as fi: #34,000,000 hashes
    number_of_matches = sum(1 for line in fi if line.strip() in s)