JKH*_*KHA 3 arrays performance vector matrix julia
除了分配一个新向量并用我的矩阵一一填充它的值之外,我如何将大小矩阵的大小调整/重新填充n x m
为大小向量,n x m
概括以下示例:
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即使不复制任何数据,Julia 也允许您执行此类操作:
\njulia> 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如果您想知道“指向相同的内存地址”是什么意思,请看一下这个示例:
\njulia> 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
)。
归档时间: |
|
查看次数: |
3116 次 |
最近记录: |