【发布时间】:2017-01-22 20:41:58
【问题描述】:
我正在针对大量稀疏数据编写机器学习算法(我的矩阵形状为 (347, 5 416 812 801),但非常稀疏,只有 0.13% 的数据不为零。
我的稀疏矩阵大小为 105 000 字节 (csr 类型。
我正在尝试通过为每个设置选择示例索引列表来分离训练/测试集。 所以我想将我的数据集分成两部分:
training_set = matrix[train_indices]
形状(len(training_indices), 5 416 812 801),仍然稀疏
testing_set = matrix[test_indices]
形状(347-len(training_indices), 5 416 812 801)也稀疏
有training_indices和testing_indices两个listint
但training_set = matrix[train_indices] 似乎失败并返回Segmentation fault (core dumped)
这可能不是内存问题,因为我在具有 64GB RAM 的服务器上运行此代码。
任何线索可能是什么原因?
【问题讨论】:
-
我的猜测是 MemoryError 没有被很好地捕获。您可能需要研究
matrix.__getitem__(索引方法)以了解它是如何进行选择的。每种稀疏格式都有自己的索引。lil和csr应该可以很好地处理行索引。coo根本不处理索引。索引稀疏矩阵不像数组那样隐藏在编译代码中(而且速度也不快)。 -
我会检查一下,但由于我使用
csr并尝试获取行,应该没问题 -
您使用的是哪个版本的 scipy?您可以通过
import scipy; print(scipy.__version__)查询 -
可能需要在 SO 或 scipy github 上搜索“稀疏”和“分段错误”。
标签: python scipy segmentation-fault sparse-matrix