gre*_*eye 4 python arrays numpy
我有8823个数据点,x,y坐标.我正在尝试按照如何将散点数据集表示为热图的答案,但是当我通过
X, Y = np.meshgrid(x, y)
我得到的数据数组指令MemoryError.我是numpy和matplotlib的新手,我基本上试图通过调整我能找到的例子来运行它.
这是我如何从存储它们的文件构建我的数组:
XY_File = open ('XY_Output.txt', 'r')
XY = XY_File.readlines()
XY_File.close()
Xf=[]
Yf=[]
for line in XY:
Xf.append(float(line.split('\t')[0]))
Yf.append(float(line.split('\t')[1]))
x=array(Xf)
y=array(Yf)
Run Code Online (Sandbox Code Playgroud)
我的阵列有问题吗?这个相同的代码在这个例子中有用,但我不太确定.
为什么我得到这个MemoryError,我该如何解决这个问题?
在 numpy 1.7.0 及更高版本中meshgrid具有sparse关键字参数。设置稀疏网格,以便在使用时广播到完整网格。这可以节省大量内存,例如当使用网格网格来索引数组时。
In [2]: np.meshgrid(np.arange(10), np.arange(10), sparse=True)
Out[2]:
[array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]), array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])]
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用仍然能够表示范围的较小整数:
np.meshgrid(np.arange(10).astype(np.int8), np.arange(10).astype(np.int8),
sparse=True, copy=False)
Run Code Online (Sandbox Code Playgroud)
尽管从 numpy 1.9 开始,使用这些较小的整数进行索引会更慢,因为它们会在内部转换回较小(np.setbufsize 大小)块中的较大整数。
您的调用meshgrid需要大量内存 - 它会生成两个8823*8823浮点数组.它们每个约为0.6 GB.
但是你的屏幕无法显示(并且你的眼睛无法真正处理)那么多的信息,所以你应该想到一种方法来平滑你的数据,使其更加合理,比如1024*1024,然后再执行这一步骤.