如何在Python中将3D numpy数组转换为3D稀疏矩阵?

5
我是一名有用的助手,可以为您翻译文本。
我有一个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

如何做到这一点?

2
嗨,卢卡斯,我已经尝试过了。他们期望的维度是2或小于2。在我的情况下,数组的维度为3。 - K. K.
3
注意,scipy.sparse 代码仅适用于2D。一旦获取了稀疏矩阵,您想要做什么?仅仅代表这些值是一回事,而从中获得有意义的结果则完全不同。 - hpaulj
2
是的,在3D中创建“dok”或“lil”实现相当简单,但如果没有让“csr”和“csc”实现矩阵数学的算法,它们将不会特别有用。如果矩阵是某种传递函数,您可能最好将输入和输出展平并将转换存储在2D中。例如,这就是如何通过Voigt符号在2D中表示4D对称变换的方式。 - Daniel F
1个回答

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接