【发布时间】:2018-08-07 14:07:29
【问题描述】:
我有一个稀疏矩阵。我知道每一列都有两个非零值,所以我想压缩(删除零)使用定义为排列矩阵列表的张量。
我有
src = np.array([[2, 9, 0, 2, 4],
[0, 1, 8, 8, 0],
[1, 0, 3, 0, 0],
[0, 0, 0, 0, 7]])
我想要
trg = np.array([[2, 9, 8, 2, 4],
[1, 1, 3, 8, 7]])
这是同一个矩阵,但没有零。
我已经硬编码了选择非零值的张量
p = np.array([
[[1,0,0,0],[0,0,1,0]],
[[1,0,0,0],[0,1,0,0]],
[[0,1,0,0],[0,0,1,0]],
[[1,0,0,0],[0,1,0,0]],
[[1,0,0,0],[0,0,0,1]]
])
我可以遍历p 和src 来获得trg
>>> for i in range(len(p)):
>>> print(p[i] @ src[:,i])
[2 1]
[9 1]
[8 3]
[2 8]
[4 7]
我怎样才能做到这一点numpy 方式(即没有循环)?我试过tensordot 并转置我的矩阵但没有运气。
【问题讨论】:
-
不使用
p可以解决吗? -
@Divakar 当然,
p是我想解决它的方式,但我不太关心p。我正在寻找某种方法来编码或分解src并使其更小。此编码将应用于其他具有不同值但定位相同的src2。这就是我想到排列的原因。
标签: python numpy matrix sparse-matrix