我在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个小型稀疏矩阵的数组,不一定是上面的示例。
答案 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)
这将为您提供与原始代码相同的结果。