Arrays 将int数组的更改与数组元素的更改相加

Arrays 将int数组的更改与数组元素的更改相加,arrays,pointers,julia,Arrays,Pointers,Julia,我以以下方式收集了一组数组: arr = Array{Array{Int64,1},1}( [ [1,2,3] , [4,5,6] , [7,8,9] ] ) 我想定义一个新的araysum,这样sums[I]=sum(arr[I]) 但是以一种动态的方式,如果我更改arr[I]的元素,对[I]求和会自动更改。例如: julia> sums 3-element Array{Int64,1}: 6 15 24 julia> arr[1][1] = 3 3 julia>

我以以下方式收集了一组数组:

arr = Array{Array{Int64,1},1}( [ [1,2,3] , [4,5,6] , [7,8,9] ] )
我想定义一个新的aray
sum
,这样
sums[I]=sum(arr[I])
但是以一种动态的方式,如果我更改
arr[I]
的元素,
对[I]
求和会自动更改。例如:

julia> sums
3-element Array{Int64,1}:
  6
 15
 24

julia> arr[1][1] = 3
3

julia> sums
3-element Array{Int64,1}:
  8
 15
 24
这可能吗?如果是这样,我怎么做呢?

您可以使用
mappedarays
提供数组
a
的“视图”
M
,以便
M[i]=f(a[i])
。您只需添加
mappedarays
package by
]添加mappedarays
并开始使用
sum
函数即可。请注意,转换是惰性的,这意味着当您尝试访问
M
中的值时,它将计算这些值。因此,在更新到
A
之后,当您访问
M
的条目时,您将看到
M
中的更改

julia> using MappedArrays

julia> arr = [ [1,2,3] , [4,5,6] , [7,8,9] ] 
3-element Array{Array{Int64,1},1}:
 [1, 2, 3]
 [4, 5, 6]
 [7, 8, 9]

julia> M = mappedarray(sum, arr)
3-element mappedarray(sum, ::Array{Array{Int64,1},1}) with eltype Int64:
  6
 15
 24

julia> arr[1][2] = 10
10

julia> M
3-element mappedarray(sum, ::Array{Array{Int64,1},1}) with eltype Int64:
 14
 15
 24

这似乎是可行的,但这个方案似乎有点陈旧,目前还没有过时。我认为在Julia的新版本(1.0之后)中可能会有一个更简单的解决方案。@AldoSayeg它是一个非常轻量级的包,大约有200行用纯Julia实现,应该可以正常工作。它不需要频繁更新,也许只是一些调整。从最终用户的角度来看,最后一次提交并没有真正改变任何东西,它只有两个月的时间,对于这样一个包来说,IMO是最近才提交的。您可以使用Julia的数组接口编写自己的映射数组。不过,我不认为这会像使用一个已经这样做的包那么简单。代码是这样的:我认为这个包已经足够好了。谢谢