Julia 中 permutedims 的功能不清楚

Aks*_*tra 6 julia

permutedims()调用多维数组时会做什么?

从它的名字来看,它显然与数组的维度有关。但是,在运行下面的代码时,输​​出是意外且不清楚的。

A = Array{Int64}(undef, 100,100,100)
B = permutedims(A, (1,2,3))
println(A == B)
Run Code Online (Sandbox Code Playgroud)

输出

`true`
Run Code Online (Sandbox Code Playgroud)

那么它是否创建了原始数组的副本?传递的元组有什么用?

Aks*_*tra 5

Julia的文档有时没有对给定主题的完整解释。

permutedims(A::AbstractArray, perm)

perms是一个元组,指定 A 的维度的新顺序,其中 1 对应于第一个维度(行),2 对应于第二个维度(列),3 对应于页面,依此类推,即此函数将返回其维度根据指定的数组perms

问题的代码中发生的事情是,通过传递 tuple (1,2,3),我们告诉 Julia 将 A 的第一个暗点放在 B 的第一个暗点的位置,将第二个放在第二个的位置,依此类推。这基本上创建了数组的副本A

用例示例

A = ones(10,20,30) # Creates an array full of 1 of the size (10,20,30)
B = permutedims(A, (3,1,2)) 

println(A == B) 
println(size(B))
Run Code Online (Sandbox Code Playgroud)

输出

false
(30, 10, 20)
Run Code Online (Sandbox Code Playgroud)