相关疑难解决方法(0)

numpy数组最快的保存和加载选项

我有一个脚本,生成二维numpy arrays dtype=float和形状的顺序(1e3, 1e6).现在我正在使用np.save并使用np.load数组执行IO操作.但是,每个阵列的这些功能需要几秒钟.是否有更快的方法来保存和加载整个数组(即,不对其内容进行假设并减少它们)?array只要数据保留完全,我就可以在保存之前将s 转换为另一种类型.

python arrays io performance numpy

35
推荐指数
5
解决办法
3万
查看次数

如何有效地读取和写入太大而无法放入内存的文件?

我试图计算100,000个向量的余弦相似度,并且这些向量中的每一个都有200,000个维度.

从阅读其他问题我知道memmap,PyTables和h5py是我处理这类数据的最佳选择,我目前正在使用两个memmaps; 一个用于读取矢量,另一个用于存储余弦相似性矩阵.

这是我的代码:

import numpy as np
import scipy.spatial.distance as dist

xdim = 200000
ydim = 100000

wmat = np.memmap('inputfile', dtype = 'd', mode = 'r', shape = (xdim,ydim))
dmat = np.memmap('outputfile', dtype = 'd', mode = 'readwrite', shape = (ydim,ydim))

for i in np.arange(ydim)):
    for j in np.arange(i+1,ydim):
        dmat[i,j] = dist.cosine(wmat[:,i],wmat[:,j])
        dmat.flush()
Run Code Online (Sandbox Code Playgroud)

目前,htop报告说我正在使用224G的VIRT内存,而91.2G的RES内存正在稳步攀升.在我看来,在整个过程结束时,整个输出矩阵将存储在内存中,这是我试图避免的.

问:这是memmaps的正确用法,我在记忆有效的方式写入到输出文件(我的意思是,只有输入和输出文件的必要部分,即dmat[i,j]wmat[:,i/j],存储在内存中)?

如果没有,我做错了什么,我该如何解决这个问题呢?

感谢您的任何建议!

编辑:我刚刚意识到htop报告的总体系统内存使用量为12G,所以它似乎正在起作用......那里有谁可以开导我?RES现在是111G ......

编辑2:memmap是从一维数组创建的,该数组由很多很长的小数组成,非常接近于0,形状符合所需的尺寸.然后memmap看起来像这样.

memmap([[  9.83721223e-03,   4.42584107e-02,   9.85033578e-03, ...,
     -2.30691545e-07,  -1.65070799e-07,   5.99395837e-08],
   [  2.96711345e-04,  -3.84307391e-04,   4.92968462e-07, ..., …
Run Code Online (Sandbox Code Playgroud)

python memory-management numpy

19
推荐指数
2
解决办法
1672
查看次数

使用h5py编写大型hdf5数据集

目前,我正在使用h5py生成hdf5数据集.我有类似的东西

import h5py
import numpy as np
my_data=np.genfromtxt("/tmp/data.csv",delimiter=",",dtype=None,names=True)

myFile="/tmp/f.hdf"    
with h5py.File(myFile,"a") as f:
  dset = f.create_dataset('%s/%s'%(vendor,dataSet),data=my_data,compression="gzip",compression_opts=9)
Run Code Online (Sandbox Code Playgroud)

这适用于相对较大的ASCII文件(400MB).我想对更大的数据集(40GB)做同样的事情.使用h5py有更好或更有效的方法吗?我想避免将整个数据集加载到内存中.

有关数据的一些信息:

  1. 我不知道数据的类型.理想情况下,我想用dtype=Nonenp.loadtxt()
  2. 我不知道文件的大小(尺寸).他们各不相同

python numpy hdf5 h5py

13
推荐指数
1
解决办法
8059
查看次数

Python内存映射

我正在使用大数据,并且我有大小像2000x100000的矩阵,所以为了更快地工作,我尝试使用numpy.memmap避免由于RAM限制而在内存中存储这个大矩阵.问题是,当我将相同的矩阵存储在2个变量中时,即一个用numpy.load,另一个用np.memmap,内容不一样.这是正常的吗?我在memmap中使用与我的数据中相同的数据类型.例:

A1 = numpy.load('mydata.npy')
A2 = numpy.memmap('mydata.npy',dtype=numpy.float64, mode='r', shape=(2000,2000))
A1[0,0] = 0
A2[0,0] = 1.8758506894003703e-309
Run Code Online (Sandbox Code Playgroud)

这是两种情况下数组第一个元素的内容.正确的一个是值0但我通过使用memmap得到这个奇怪的数字.谢谢.

python numpy

7
推荐指数
1
解决办法
4650
查看次数

numpy如何处理mmap的npz文件?

我有一个案例,我想使用mmap模式打开一个压缩的numpy文件,但似乎无法找到任何有关它如何在幕后工作的文档.例如,它会解压缩内存中的存档然后mmap吗?它会在飞行中解压缩吗?

该配置缺少该文档.

gzip mmap numpy

7
推荐指数
1
解决办法
2136
查看次数

标签 统计

numpy ×5

python ×4

arrays ×1

gzip ×1

h5py ×1

hdf5 ×1

io ×1

memory-management ×1

mmap ×1

performance ×1