【问题标题】:How to convert a 3D numpy array into a 3D sparse matrix in Python?如何在 Python 中将 3D numpy 数组转换为 3D 稀疏矩阵?
【发布时间】:2019-02-11 06:30:04
【问题描述】:

我有一个 3D NumPy 数组,我想在 Python 中将其转换为 3D 稀疏矩阵。我查找了scipy.sparse 模块,只找到了二维稀疏矩阵实现。例如,

输入:

array([[[0],
        [0],
        [1],
        [0],
        [1],
        [0],
        [0]],
       [[1],
        [0],
        [1],
        [0],
        [0],
        [0],
        [0]]])

输出:

(0,0,2) 1
(0,0,4) 1
(0,1,0) 1
(0,1,2) 1

如何做到这一点?

【问题讨论】:

  • 嗨卢卡斯,我已经试过了。他们期望维度为 2 或小于 2。在我的例子中,数组的维度是 3。
  • 如您所见,scipy.sparse 代码仅适用于 2d。一旦你有了稀疏矩阵,你想对它做什么?代表价值观是一回事,用它们做有意义的事情是另一回事。
  • 是的,在 3d 中创建 doklil 实现相当简单,但如果没有让 csrcsc 实现执行矩阵数学的算法,它们就不会特别有用。如果矩阵是某种传递函数,您可能会更好地展平输入和输出并将转换存储在 2D 中。例如,这就是如何通过Voigt Notation 在 2D 中表示 4D 对称变换

标签: python numpy scipy


【解决方案1】:

在 n 维中,您可以找到以下索引:

ind=np.array(np.where(a!=0)).T
#array([[0, 2, 0],
#       [0, 4, 0],
#       [1, 0, 0],
#       [1, 2, 0]], dtype=int64)

以及相应的值,例如:

ravel_ind=np.apply_along_axis(ravel_multi_index,1,ind,a.shape)
values=np.take(a,ravel_ind)
# array([1, 1, 1, 1])  

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2021-11-25
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2018-05-30
    • 2023-04-10
    • 2019-05-09
    • 1970-01-01
    相关资源
    最近更新 更多