在Julia中将函数映射到稀疏矩阵的数组

时间:2019-03-24 18:00:00

标签: function julia sparse-matrix

我在Julia中有一个public稀疏矩阵数组,名为1000-element Array{SparseMatrixCSC{Float64,Int64},1},其中包含1000个稀疏矩阵。我使用Julia的A包中的命令sparse来存储Array的每个稀疏矩阵。我在下面提供摘录:

SparseArrays

我想将以下功能应用于julia> A 1000-element Array{SparseMatrixCSC{Float64,Int64},1}: [1 , 1] = 0.994372 [2 , 1] = 0.991773 [3 , 1] = 0.992271 [4 , 1] = 0.998889 [5 , 1] = 0.992853 [6 , 1] = 0.998921 [7 , 1] = 0.98486 [8 , 1] = 0.988783 [9 , 1] = 0.995152 ⋮ [1492, 42] = 0.955595 [1493, 42] = 0.982923 [1494, 42] = 0.951944 [1495, 42] = 1.0 [1496, 42] = 0.975999 [1497, 42] = 0.954872 [1498, 42] = 0.963355 [1499, 42] = 0.925815 [1500, 42] = 0.93627 [1 , 1] = 0.975476 [2 , 1] = 0.977395 [3 , 1] = 0.996842 [4 , 1] = 0.996767 [5 , 1] = 0.998007 [6 , 1] = 0.996788 [7 , 1] = 0.959937 [8 , 1] = 0.996806 [9 , 1] = 0.97679 ⋮ [1492, 42] = 0.991332 [1493, 42] = 0.999623 [1494, 42] = 0.982065 [1495, 42] = 0.984356 [1496, 42] = 0.998067 [1497, 42] = 0.987055 [1498, 42] = 0.995269 [1499, 42] = 0.977139 [1500, 42] = 0.98173 ....

A

该函数获取Array的每个矩阵,并为所选矩阵的每一行寻找最大值。当map(function maxkernLY(x) map(y->y[2],mapslices(findmax, x, dims=2)) end,A) 由密集矩阵组成时,该函数可以正常工作,但是当A由上述稀疏矩阵组成时,会出现以下错误:

A

有任何提示吗?可以是任何稀疏矩阵数组,甚至可以是2个小型稀疏矩阵的数组,不一定是上面的示例。

1 个答案:

答案 0 :(得分:1)

这样做:

getindex.(findmax.(A, dims=2), 2)

给你你想要的吗? (与您的代码略有不同,它返回的是整个数组中而不是行中的索引,但是如果您不喜欢它,可以简单地解决;实际上,这些双索引在以后使用时可能会更容易)。

关于您的原始代码-这似乎是Julia中的错误。当您在\ SparseArrays \ src \ sparsematrix.jl中的第2677行阅读setindex!的定义时,这一点得到确认。

编辑

如果您想使用mapslices,则可以使用以下内容:

map(x -> mapslices(t -> collect(findmax(t)), x, dims=2)[:, 2], A)

getindex.(mapslices.(t -> collect(findmax(t)), A, dims=2), :, 2)

这将为您提供与原始代码相同的结果。