【发布时间】:2011-10-11 06:35:35
【问题描述】:
我在 Matlab 中有一个 N x N 稀疏矩阵,它的单元格值由 (r,c) 对索引,使得 r 和 c 是唯一的 id。
问题是,在把这个矩阵转换成 Python 之后,所有的索引值都减 1。
例如:
Before After
(210058,10326) = 1 (210057,10325) = 1
目前,我正在采取以下措施来解决这个问题:
mat_contents = sparse.loadmat(filename)
G = mat_contents['G']
I,J = G.nonzero()
I += 1
J += 1
V = G.data
G = sparse.csr_matrix((V,(I,J)))
我也尝试在 scipy.sparse.io.loadmat {matlab_compatible, mat_dtype} 中使用不同的选项,但都没有奏效。
我正在寻找一种能够为我提供与 Matlab 矩阵相同的索引的解决方案。不需要重建矩阵的解决方案将是理想的,但我也很好奇其他人是如何解决这个问题的。
【问题讨论】:
-
既然python使用基于0的索引,为什么不直接在使用python的时候进行心理转换呢?
-
我想我可以。我对 Python 很陌生。我只是假设这个问题非常普遍,以至于我没有注意到的语言中有一些内置功能。
-
我的建议是与 python/numpy/scipy 环境保持一致。如果您在迁移到 python 后创建任何数组,它们都将使用从零开始的索引,并且所有方法和切片都假定相同。一开始切换可能会很痛苦,但你会习惯它并避免以后出现其他问题。
-
注意详细说明您的实际问题。为什么不使用 python 在内部操作基于 0 的索引,如果需要将它们转换为 1 以进行 matlab 处理(反之亦然)。谢谢
-
我可以做基于 0 的内部索引。我想保持索引不变,因为我有一个包含可以使用用户 ID 访问的元数据的文件。我可能只是重建数据文件,而不用担心在 Matlab 和 Python 之间来回切换。谢谢
标签: python numpy scipy sparse-matrix