Matrix 矩阵中的逆序列/对角

Matrix 矩阵中的逆序列/对角,matrix,julia,Matrix,Julia,这是我和朱莉娅的第一次30分钟 目标是找出矩阵的两条对角线的内容(左上->右下->右上->左下)。Julia对我来说是新手,所以我的方法是反转原始矩阵的列,这样我就可以在这两个列上使用diag函数 下面的代码重新排列了这些列 state = [ 0 1 2; 1 2 0; 0 2 1] result = zeros(3,3) for col=[1:3] result[:, col] = state[:,4-col] end 我可以确认代码符合我的要求 > println(sta

这是我和朱莉娅的第一次30分钟

目标是找出矩阵的两条对角线的内容(左上->右下->右上->左下)。Julia对我来说是新手,所以我的方法是反转原始矩阵的列,这样我就可以在这两个列上使用
diag
函数

下面的代码重新排列了这些列

state = [ 0 1 2; 1 2 0; 0 2 1]
result = zeros(3,3)
for col=[1:3]
    result[:, col] =  state[:,4-col]
end
我可以确认代码符合我的要求

> println(state)
[0 1 2
 1 2 0
 0 2 1]
> println(result)
[2.0 1.0 0.0
 0.0 2.0 1.0
 1.0 2.0 0.0]
我可以找到我想要的两条对角线

> println(diag(state))
[0,2,1]
> println(diag(result))
[2.0,2.0,0.0]
感觉上我可以在一个单行程序中或者通过一个我在文档中找不到的本机函数来完成这项工作。列反转处的for循环和两个diag调用的使用似乎都在重复我自己


实现我想要的最好的方式是什么

朱利安的一种方法是使用理解:

julia> M = randn(5,5)
5x5 Array{Float64,2}:
 -0.0560902  -0.949341   -0.525774  -1.46393   -0.30404
 -0.409552    1.60397     1.18376   -0.397768   0.37188
  0.581681    0.18783    -0.611989  -1.03926   -0.240255
  0.0336476  -1.6296     -0.183579  -0.223435  -0.0134303
 -0.16528    -0.0928992   0.412221  -1.61453    0.564105

julia> [ M[i,i] for i=1:5 ]
5-element Array{Any,1}:
 -0.0560902
  1.60397
 -0.611989
 -0.223435
  0.564105

julia> [ M[i,5-i+1] for i=1:5 ]
5-element Array{Any,1}:
 -0.30404
 -0.397768
 -0.611989
 -1.6296
 -0.16528

在全局范围内,这会生成任何数组,但不是最佳数组。您可以通过将
M
声明为常量来修复此问题:
const M=randn(5,5)
。或者,如果理解出现在局部范围内,它们将被很好地键入。

列出理解,很好。当我使用您的方法反转列的顺序时,输出似乎有点不同
A=[0112;222;0112]
println
[0112\n2\n0112]
M=[A[:,4-i]代表i=1:3]
println
[2,2,2],[1,2,1],[0,2,0]
。这两种类型的数组之间有什么真正的区别吗?只是打印方式不同吗?是的,你需要切片,这样你就得到了一个数组。