是否为numpy数组定义了最大大小?

是否为numpy数组定义了最大大小?,numpy,Numpy,如果我试图执行: np.empty(shape= (108698,200,1000)) 在我的jupyter笔记本中,它抛出了一个错误 MemoryError Traceback (most recent call last) <ipython-input-35-0aedb09803e9> in <module>() 1 import numpy as np 2 #np.empty(sh

如果我试图执行:

np.empty(shape= (108698,200,1000))
在我的jupyter笔记本中,它抛出了一个错误

MemoryError                               Traceback (most recent call last)
<ipython-input-35-0aedb09803e9> in <module>()
      1 import numpy as np
      2 #np.empty(shape=(108698-0,200,1000))
----> 3 np.empty(shape= (108698,200,1000))
      4 #np.empty(shape=(end-start,n_words,embedding_size))
它执行时没有任何错误

那么,有什么方法可以运行呢

np.empty(shape= (108698,200,1000)) 

不增加我的机器的RAM吗?

不。虽然这取决于你正在运行什么,但如果你已经达到了最大分配内存,你就不能创建更多。例如,如果您运行的是64位numpy,每个条目8个字节,那么总共将是174GB,这将占用太多的空间。如果您知道数据条目,并且愿意使用numpy之外的内容,那么您可以研究稀疏数组。稀疏数组仅存储可能节省空间的非零元素及其位置索引。

否。虽然这取决于您运行的内容,但如果您已达到最大分配内存,则无法创建更多。例如,如果您运行的是64位numpy,每个条目8个字节,那么总共将是174GB,这将占用太多的空间。如果您知道数据条目,并且愿意使用numpy之外的内容,那么您可以研究稀疏数组。稀疏数组仅存储可能节省空间的非零元素及其位置索引。

没有为
形状定义上限,但数组的整体大小限制为
numpy.intp
,通常为
int32
int64


您可以使用SciPi中的稀疏矩阵,也可以将大型
(1086982001000)
数组的
dtype
限制为
int8
,这样应该可以工作。

没有为
形状定义上限,但数组的整个大小限制为
numpy.intp
,通常是
int32
int64


您可以使用SciPi中的稀疏矩阵,也可以将大型
(1086982001000)
数组的
dtype
限制为
int8
,这样应该可以工作。

您可以使用内存映射文件来处理不适合内存的数组。Numpy具有用于此的设施:

例如:


但是,在32位Python上,文件仍然限制为2GB。

您可以使用内存映射文件处理不适合内存的数组。Numpy具有用于此的设施:

例如:


但是,在32位Python上,文件仍然限制在2GB。

没有上限。我们可以(粗略地)估计ndarray的内存量:

>>> arr = np.empty(shape= (100,10,1000),dtype='unit8')
>>> hr_size(arr.nbytes)
'1M'
对于包含100万个元素的ndarray(“uint8”的每个元素都需要一个字节),我们需要“976.6K”的内存

对于具有shape=(843232001000)和dtype='uint8'的ndarray

>>> hr_size(84323*200*1000)
'15.7G'
>>> hr_size(108698*200*1000)
'20.2G'
我们需要超过15克

最后,对于具有shape=(1086982001000)和dtype='uint8'的ndarray

>>> hr_size(84323*200*1000)
'15.7G'
>>> hr_size(108698*200*1000)
'20.2G'
我们需要超过20克


如果数据类型为“int64”,则估计的内存量应增加八倍

嗯,没有上限。我们可以(粗略地)估计ndarray的内存量:

>>> arr = np.empty(shape= (100,10,1000),dtype='unit8')
>>> hr_size(arr.nbytes)
'1M'
对于包含100万个元素的ndarray(“uint8”的每个元素都需要一个字节),我们需要“976.6K”的内存

对于具有shape=(843232001000)和dtype='uint8'的ndarray

>>> hr_size(84323*200*1000)
'15.7G'
>>> hr_size(108698*200*1000)
'20.2G'
我们需要超过15克

最后,对于具有shape=(1086982001000)和dtype='uint8'的ndarray

>>> hr_size(84323*200*1000)
'15.7G'
>>> hr_size(108698*200*1000)
'20.2G'
我们需要超过20克

如果数据类型为“int64”,则估计的内存量应增加八倍