Julia - 将矩阵转换为向量

JKH*_*KHA 3 arrays performance vector matrix julia

除了分配一个新向量并用我的矩阵一一填充它的值之外,我如何将大小矩阵的大小调整/重新填充n x m为大小向量,n x m概括以下示例:

\n
julia> example_matrix = [i+j for i in 1:3, j in 1:4]\n3\xc3\x974 Array{Int64,2}:\n 2  3  4  5\n 3  4  5  6\n 4  5  6  7\n\njulia> res_vect = [2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7]\n12-element Array{Int64,1}:\n 2\n 3\n 4\n 3\n 4\n 5\n 4\n 5\n 6\n 5\n 6\n 7\n
Run Code Online (Sandbox Code Playgroud)\n

我的一个想法是:

\n
 res_vect = Int[]\n for j in 1:size(example_matrix,2)\n    res_vect = vcat(res_vect, example_matrix[:,j])\n end\n
Run Code Online (Sandbox Code Playgroud)\n

我感觉这不是最佳方式,但我无法解释为什么......

\n

Prz*_*fel 7

即使不复制任何数据,Julia 也允许您执行此类操作:

\n
julia> m = [i+j for i in 1:3, j in 1:4]\n3\xc3\x974 Matrix{Int64}:\n 2  3  4  5\n 3  4  5  6\n 4  5  6  7\n\njulia> m1 = vec(m)  # m1 points to the same memory address as m\n12-element Vector{Int64}:\n 2\n 3\n 4\n 3\n 4\n 5\n 4\n 5\n 6\n 5\n 6\n 7\n\njulia> m2 = reshape(m, 4, 3) # m2 still points to the same memory address as m\n4\xc3\x973 Matrix{Int64}:\n 2  4  6\n 3  5  5\n 4  4  6\n 3  5  7\n
Run Code Online (Sandbox Code Playgroud)\n

如果您想知道“指向相同的内存地址”是什么意思,请看一下这个示例:

\n
julia> m2[1,1] = -66         \n-66                          \n                             \njulia> m                     \n3\xc3\x974 Matrix{Int64}:           \n -66  3  4  5                \n   3  4  5  6                \n   4  5  6  7                \n
Run Code Online (Sandbox Code Playgroud)\n

最后,如果在任何时候您实际上需要一个副本而不是对相同数据的引用,请使用copy(m)或如 @DNF 所评论的那样m[:](这是一个维度下降运算符,它返回Vector来自任何数据的副本Array)。

\n

  • 要使用复制来获取向量,只需编写“y = x[:]”即可。 (2认同)