我有以下几种数组的集合:
arr = Array{Array{Int64,1},1}( [ [1,2,3] , [4,5,6] , [7,8,9] ] )
我想定义一个新的sum
,这样sums[i] = sum(arr[i])
但是以一种动态的方式,使得如果我更改arr[i]
的元素,sums[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
这有可能吗?如果是这样,我该怎么办?
答案 0 :(得分:1)
您可以使用MappedArrays
。 MappedArrays
提供数组M
的“视图” A
,以便M[i] = f(A[i])
。您需要做的全部工作是通过MappedArrays
添加]add MappedArrays
软件包,并开始使用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