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)