首页 > 解决方案 > 如何在 Python 中将 3D numpy 数组转换为 3D 稀疏矩阵?

问题描述

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

输入:

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

怎么做?

标签: pythonnumpyscipy

解决方案


在 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])  

推荐阅读