首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python sklearn读取非常大的svmlight文件

python sklearn读取非常大的svmlight文件
EN

Stack Overflow用户
提问于 2017-07-17 10:20:24
回答 1查看 1.5K关注 0票数 2

我使用python2.7与svmlight一起存储和读取一个非常大的svmlight格式文件。

我正在使用

代码语言:javascript
复制
import sklearn
rows, labels = sklearn.datasets.load_svmlight_file(matrixPath, zero_based=True)

该文件太大,无法存储在内存中。我正在寻找一种方法来迭代文件的批次,而不需要预先分割文件。

现在,我发现最好的方法是使用终端命令拆分svmlight文件。然后读取我创建的部分文件。

我认为读取大文件的一个好方法是逐行逐行读取,以避免内存溢出。

如何使用svmlight格式的文件来完成此操作?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-07-17 09:08:34

我遇到了同样的问题,以下是我的解决方案:

通过使用load_svmlight_file函数,您可以指定offsetlength参数。来自文档

偏移量:整数,可选,默认为0

  • 通过查找前向忽略偏移量第一字节,然后丢弃以下字节直到下一个新行字符。

length:整数,可选,默认-1

  • 如果严格为正,则在文件中的位置达到(偏移量+长度)字节阈值后,停止读取任何新的数据行。

下面是一个示例,说明如何批量遍历svmlight文件:

代码语言:javascript
复制
from sklearn.datasets import load_svmlight_file

def load_svmlight_batched(filepath, n_features, batch_size):
    offset = 0
    with open(filepath, 'rb') as f:
        X, y = load_svmlight_file(f, n_features=n_features,
                                  offset=offset, length=batch_size)
        while X.shape[0]:
            yield X, y
            offset += batch_size
            X, y = load_svmlight_file(f, n_features=n_features,
                                      offset=offset, length=batch_size)

def main(filepath):
    iterator = load_svmlight_batched(filepath, 
                                     n_features=2**14, 
                                     batch_size=10000)
    for X_batch, y_batch in iterator:
        # Do something
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45141637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档