Function 将函数映射到Julia中的稀疏矩阵数组
我有一个Function 将函数映射到Julia中的稀疏矩阵数组,function,julia,sparse-matrix,Function,Julia,Sparse Matrix,我有一个1000元素数组{sparsematricxcsc{Float64,Int64},1}Julia中的稀疏矩阵数组,名为a,其中包含1000个稀疏矩阵。我使用Julia的sparsearray包的sparse命令来存储数组的每个稀疏矩阵。我提出以下摘录: julia> A 1000-element Array{SparseMatrixCSC{Float64,Int64},1}: [1 , 1] = 0.994372 [2 , 1] = 0.991
1000元素数组{sparsematricxcsc{Float64,Int64},1}
Julia中的稀疏矩阵数组,名为a
,其中包含1000个稀疏矩阵。我使用Julia的sparsearray
包的sparse
命令来存储数组的每个稀疏矩阵。我提出以下摘录:
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
:
map(function maxkernLY(x) map(y->y[2],mapslices(findmax, x, dims=2)) end,A)
该函数获取数组的每个矩阵,并为选定矩阵的每一行查找最大值。当A
由密集矩阵组成时,函数工作正常,但当A
由上述稀疏矩阵组成时,我得到以下错误:
MethodError: no method matching zero(::Type{Tuple{Float64,Int64}})
有什么提示吗?可以是任意稀疏矩阵数组,甚至是2个小稀疏矩阵数组,不一定是上面的示例。这样做:
getindex.(findmax.(A, dims=2), 2)
给你想要的?(与您的代码稍有不同的是,它返回的是整个数组中的索引,而不是行中的索引,但是如果您不喜欢它,可以简单地解决这个问题;实际上,以后使用这些双索引可能更容易)
关于您的原始代码-这似乎是Julia中的一个bug。这在您阅读setindex的定义时得到确认代码>在\SparseArrays\src\sparsematrix.jl中第2677行附近
编辑
如果要使用mapslices
,可以使用以下内容:
map(x -> mapslices(t -> collect(findmax(t)), x, dims=2)[:, 2], A)
或
这将为您提供与原始代码相同的结果。好的,我将尝试向您发布消息;-)感谢编辑部分的第二个选项工作正常:-)第一个选项给出了一个错误:Out of Bonds errorfixed-我复制了粘贴的代码部分,但忘记了修复它。好的,太完美了!非常感谢。
getindex.(mapslices.(t -> collect(findmax(t)), A, dims=2), :, 2)