我的问题类似于前面描述的问题,不同之处在于我没有手动输入数字.因此,那里接受的答案对我不起作用.
我想将笛卡尔坐标向量转换为极坐标:
function cart2pol(x0,
x1)
rho = sqrt(x0^2 + x1^2)
phi = atan2(x1, x0)
return [rho, phi]
end
@vectorize_2arg Number cart2pol
function cart2pol(x)
x1 = view(x,:,1)
x2 = view(x,:,2)
return cart2pol(x1, x2)
end
x = rand(5,2)
vcat(cart2pol(x))
Run Code Online (Sandbox Code Playgroud)
最后一个命令由于某种原因不收集数组,返回类型的输出5-element Array{Array{Float64,1},1}.知道怎么把它投到Array{Float64,2}吗?
如果看一下的定义cat(这是潜在的功能hcat和vcat),你看到可以收集多个阵列成尺寸2的一个单一的阵列:
cat(2, [1,2], [3,4], [5,6])
2×3 Array{Int64,2}:
1 3 5
2 4 6
Run Code Online (Sandbox Code Playgroud)
这基本上就是你想要的.问题是你有一个数组本身的所有输出极点.cat希望你提供它们作为几个参数.这是...进来的地方.
...用于在函数调用的上下文中使用时,将单个函数参数拆分为许多不同的参数.
因此,你可以写
cat(2, [[1,2], [3,4], [5,6]]...)
2×3 Array{Int64,2}:
1 3 5
2 4 6
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它的工作方式完全相同(我改变了你的x列数):
x=rand(2,5)
cat(2, cart2pol.(view(x,1,:),view(x,2,:))...)
2×5 Array{Float64,2}:
0.587301 0.622 0.928159 0.579749 0.227605
1.30672 1.52956 0.352177 0.710973 0.909746
Run Code Online (Sandbox Code Playgroud)