给出数组:
arr = [1 2; 3 4; 5 6]
3×2 Array{Int64,2}:
1 2
3 4
5 6
被扁平化的flat_arr = collect(Iterators.flatten(arr))
6-element Array{Int64,1}:
1
3
5
2
4
6
有时我需要在两种索引格式之间切换。例如,如果我得到了flat_arr
的排序索引,则可能要使用这些排序索引对arr
进行迭代。在Python中,通常使用np.unravel_index
完成。在Julia中如何完成?我是否只需要编写自己的函数?
答案 0 :(得分:1)
vec()
创建数组的一维视图。因此,您可以在内存中同时拥有两个指向数组的指针,并在任何时候使用所需的任何指针(它们指向同一数组):
julia> arr = [1 2; 3 4; 5 6]
3×2 Array{Int64,2}:
1 2
3 4
5 6
julia> arr1d = vec(arr)
6-element Array{Int64,1}:
1
3
5
2
4
6
julia> arr1d[4] = 99
99
julia> arr
3×2 Array{Int64,2}:
1 99
3 4
5 6
请注意,在Julia中,数组按主列存储,因此第四个值是第二列的第一个值
答案 1 :(得分:1)
这可以使用CartesianIndices
完成。
c_i = CartesianIndices(arr)
flat_arr[2] == arr[c_i[2]]) == 3