本文将介绍为什么numpy.zeros占用很少的空间的详细情况,特别是关于numpy数据占用内存空间大小的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些
本文将介绍为什么numpy.zeros占用很少的空间的详细情况,特别是关于numpy数据占用内存空间大小的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于API: numpy.zeros、python – 为什么numpy fft会返回错误的相位信息?、python – 为什么numpy.spacing(0)给我一个不可能的数字?、python – 为什么numpy允许你添加不同大小的数组?的知识。
本文目录一览:- 为什么numpy.zeros占用很少的空间(numpy数据占用内存空间大小)
- API: numpy.zeros
- python – 为什么numpy fft会返回错误的相位信息?
- python – 为什么numpy.spacing(0)给我一个不可能的数字?
- python – 为什么numpy允许你添加不同大小的数组?
为什么numpy.zeros占用很少的空间(numpy数据占用内存空间大小)
我想知道为什么numpy.zeros占用这么小的空间?
x = numpy.zeros(200000000)
这不会占用任何内存,
x = numpy.repeat(0,200000000)
占用约1.5GB。numpy.zeros是否创建一个空指针数组?如果是这样,是否可以在cython中更改指针后将其设置为空?如果我使用:
x = numpy.zeros(200000000)x[0:200000000] = 0.0
内存使用率上升。有没有办法更改一个值,然后将其更改回numpy.zeros的格式,最初是在python或cython中使用的?
答案1
小编典典您在使用Linux吗?Linux的内存分配是延迟的。malloc
和calloc
numpy中的基础调用始终“成功”。在首次访问该内存之前,实际上没有分配任何内存。
该zeros
函数将使用calloc
它在首次访问之前将所有分配的内存清零。因此,numpy无需将数组显式清零,因此将延迟初始化数组。而该repeat
函数不能依赖于calloc
初始化数组。相反,它必须使用malloc
然后将重复项复制到数组中的所有元素(因此强制立即分配)。
API: numpy.zeros
为了以后查找方便;无时间整理,也没整理的必要,直接贴图了.
参考网站: http://docs.scipy.org/doc/numpy/reference/index.html
摘自: 《NumPy Reference, Release 1.7.0》
python – 为什么numpy fft会返回错误的相位信息?
Matlab的:
fs = 1e4; dt = 1 / fs; t = 0:dt:0.5; F = 1e3; y = cos(2*pi*F*t); S = fftshift(fft(y) / length(y)); f_scale = linspace(-1,1,length(y)) * (fs / 2); a = abs(S); phi = (angle(S)); subplot(2,1) plot(f_scale,a) title('amplitude') subplot(2,2) plot(f_scale,phi) title('phase')
Python:
import numpy as np import matplotlib.pyplot as plt fs = 1e4 dt = 1 / fs t = np.arange(0,0.5,dt) F = 1e3 y = np.cos(2*np.pi*F*t) S = np.fft.fftshift(np.fft.fft(y) / y.shape[0]) f_scale = np.linspace(-1,y.shape[0]) * (fs / 2) a = np.abs(S) phi = np.angle(S) plt.subplot(2,title="amplitude") plt.plot(f_scale,a) plt.subplot(2,2,title="phase") plt.plot(f_scale,phi) plt.show()
matlab output
numpy output
解决方法
t = np.arange(0,0.5+dt,dt)
一切都会好起来的.
python – 为什么numpy.spacing(0)给我一个不可能的数字?
这怎么可能?
我在网上找不到答案,就浮点标准而言,这个数字当然是不可能的.
解决方法
>>> from math import log >>> log(4.94e-324,2) -1074.0
并且只是为了确保:
>>> 2**-1074 5e-324
这肯定小于-1022,这应该是最小指数.实际上,它比最小值小52,即有效数中的位数.这里有一些有趣的东西……
你实际得到的是一个subnormal浮点数,它用指数为零编码(解释为实际可能的最低指数),并放宽了有效数字必须从二进制1开始的通常规则,允许你以精度为代价代表非常小的数字:
>>> (5e-324).hex() '0x0.0000000000001p-1022'
python – 为什么numpy允许你添加不同大小的数组?
当你做类似的事情时,为什么numpy不会抛出错误
np.ones((5,5)) + np.ones(5)
这种添加在线性代数中没有明确定义,它只花了我几个小时来追踪一个归结为这个的错误
np.ones((5,5)) + np.ones(5)
np.ones((5,5)) + np.ones(4) <- This would give a error.
因为np.ones(5)符合每一行的大小,所以它将逐行添加到每一行.
这就是numpy的工作方式.我不是线性代数模块.
这是一个如何做到的简短示例,这需要扩展,具有更多的逻辑和聪明.只是一个概念证明.
import numpy as np
class myMatrixClass(np.ndarray):
def __add__(self,val):
if (hasattr(val,'__iter__') and self.shape != val.shape):
print "not valid addition!"
else:
return super(myMatrixClass,self).__add__(val)
In [33]: A = myMatrixClass( shape=(5,5))
In [34]: A[:] = 1
In [35]: B = A + 1
In [36]: B
Out[36]:
myMatrixClass([[ 2.,2.,2.],[ 2.,2.]])
In [37]: C = A + np.ones(5)
not valid addition!
关于为什么numpy.zeros占用很少的空间和numpy数据占用内存空间大小的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于API: numpy.zeros、python – 为什么numpy fft会返回错误的相位信息?、python – 为什么numpy.spacing(0)给我一个不可能的数字?、python – 为什么numpy允许你添加不同大小的数组?等相关内容,可以在本站寻找。
本文标签: