python - Numpy:连接时出现分段错误
问题描述
不幸的是,过时的 numpy 版本1.8.2
,我得到以下行为:
我有一本包含八个稀疏 CSR 矩阵作为值的字典。
>>> tmp = [ (D[key][select,:].T.sum(0))[:,:,None] for key in D ];
到此为止,没有问题。该列表包含具有形状的密集 2d numpy 矩阵(1,len(select),1)
。len(select)
小于 300。内存消耗仅为 3% 左右,几乎 7 GB 可用 RAM 。
>>> result = np.concatenate(tmp,axis=2);
眨眼之间,我从终端收到了 Segmentation Fault (' Speicherzugriffsfehlerhtop
'),没有可见的内存将运行满或任何情况。另外,我认为消耗量不应超过以前的大约两倍,这实际上不算什么。尽管如此,我可以随心所欲地重复,它总是给我一个 SegFault。
我想排除这是我的实施问题。
更新:似乎将 numpy 稍微更新到 1.10 版后,问题不再发生。也许 1.8.2 中有一些严重的错误,没有人关心,因为它已经完全过时了......
解决方案
查看您的代码,发生了一些奇怪的事情(即使在 1.16 中)
从样本稀疏矩阵开始:
In [365]: M
Out[365]:
<10x10 sparse matrix of type '<class 'numpy.float64'>'
with 20 stored elements in Compressed Sparse Row format>
In [366]: M[0,:].T
Out[366]:
<10x1 sparse matrix of type '<class 'numpy.float64'>'
with 3 stored elements in Compressed Sparse Column format>
In [367]: M[0,:].T.sum(0)
稀疏矩阵的行或列总和产生np.matrix
.
Out[367]: matrix([[1.91771869]])
In [368]: M[0,:].T.sum(0)[:,:,None]
Out[368]: matrix([[[1.91771869]]])
我们不应该将 a 扩展np.matrix
到 3d。这会导致连接问题吗?不是现在,但它可能在早期版本中
In [369]: np.concatenate([M[0,:].T.sum(0)[:,:,None]])
Out[369]: matrix([[1.91771869]])
In [370]: _368.shape
Out[370]: (1, 1, 1)
In [371]: np.concatenate([_368,_368])
Out[371]: matrix([[1.91771869, 1.91771869]])
就在几天前,我看到了一个产生 3d 的问题np.matrix
,而它不应该产生。
推荐阅读
- vba - 访问报告中的空白数据
- authentication - /oauth/token 与 /api/login FusionAuth
- r - 函数中不同数据集的不同操作
- javascript - 为什么我不能有两个相互执行的 .js 脚本?
- javascript - 如何读取带点的 JSON 数据
- ruby-on-rails - 存在吗?具有多个条件的 Ruby Postgresql 活动记录验证
- python - 用 logging.info() 替换 print('', end='\r') 语句会引发错误
- javascript - 防止在 ReactJS 中激活多个按钮颜色
- json - 序列化 DRF 中的嵌套对象
- awk - 使用 awk 比较两个文件中的两列时创建一个新文件