【发布时间】:2019-06-03 05:39:00
【问题描述】:
假设我有一个 2D SciPy 稀疏矩阵:
import numpy as np
from scipy.sparse import csc_matrix
arr = np.array([[0, 0, 1, 0, 1],
[1, 0, 0, 1, 0],
[0, 1, 1, 0, 0],
[1, 0, 0, 1, 0],
[0, 1, 0, 0, 0],
])
csc = csc_matrix(arr)
对于矩阵中的每个非零元素,我想创建四个新的稀疏矩阵,其中包含与下一个最近的 Left、Right、Up 和 Down 非零邻居对应的索引。末端的元素可以有环绕的邻居(想想水平和垂直方向的圆形双向链表或环形)。如果一个元素是其行/列中唯一的非零元素,则相应的索引将指向它自己。此外,由于索引可以具有零值(当引用第一行或第一列时)并且与自然为零的元素无法区分,我们将这些零索引设置为 -1 以消除实际索引与零元素的歧义。
对于上面的矩阵,密集的 Left 和 Down 矩阵如下所示:
left = np.array([[0, 0, 4, 0, 2],
[3, 0, 0, -1, 0],
[0, 2, 1, 0, 0],
[3, 0, 0, -1, 0],
[0, 1, 0, 0, 0],
])
down = np.array([[0, 0, 2, 0, -1],
[3, 0, 0, 3, 0],
[0, 4, -1, 0, 0],
[1, 0, 0, 1, 0],
[0, 2, 0, 0, 0],
])
请记住,索引值为 -1 的元素实际上是对索引零的引用。当然,我需要将这些矩阵设为稀疏矩阵形式,因为我的真实矩阵太大太稀疏,无法放入内存。
【问题讨论】:
标签: python numpy matrix scipy sparse-matrix