我是一个朱莉娅新手,有一个婴儿作业要编写一个将向量的向量转换为矩阵的函数。通过迭代元素,这很容易做到。
然而,我读到广播往往效率更高。但我不确定如何在这里执行此操作,因为 .= 操作无法工作,因为它会将向量读取为 1 by n 数组,从而尝试在两个不同长度的数组上进行广播。
有办法播吗?
我的代码如下
function vecvec_to_matrix(vecvec)
dim1 = length(vecvec)
dim2 = length(vecvec[1])
my_array = zeros(Int64, dim1, dim2)
for i in 1:dim1
for j in 1:dim2
my_array[i,j] = vecvec[i][j]
end
end
return my_array
end
Run Code Online (Sandbox Code Playgroud)
如果您的向量很短且大小固定(例如,3 维的点列表),那么您应该强烈考虑使用StaticArrays 包,然后调用reinterpret. 演示:
julia> using StaticArrays\n\njulia> A = rand(3, 8)\n3\xc3\x978 Array{Float64,2}:\n 0.153872 0.361708 0.39703 0.405625 0.0881371 0.390133 0.185328 0.585539\n 0.467841 0.846298 0.884588 0.798848 0.14218 0.156283 0.232487 0.22629\n 0.390566 0.897737 0.569882 0.491681 0.499163 0.377012 0.140902 0.513979\n\njulia> reinterpret(SVector{3,Float64}, A)\n1\xc3\x978 reinterpret(SArray{Tuple{3},Float64,1,3}, ::Array{Float64,2}):\n [0.153872, 0.467841, 0.390566] [0.361708, 0.846298, 0.897737] [0.39703, 0.884588, 0.569882] \xe2\x80\xa6 [0.390133, 0.156283, 0.377012] [0.185328, 0.232487, 0.140902] [0.585539, 0.22629, 0.513979]\n\njulia> B = vec(copy(ans))\n8-element Array{SArray{Tuple{3},Float64,1,3},1}:\n [0.1538721224514592, 0.467840786943454, 0.39056612358281706]\n [0.3617079493961777, 0.8462982350893753, 0.8977366743282564]\n [0.3970299970547111, 0.884587972864584, 0.5698823030478959]\n [0.40562472747685074, 0.7988484677138279, 0.49168126614394647]\n [0.08813706434793178, 0.14218012559727544, 0.499163319341982]\n [0.3901332827772166, 0.15628284837250006, 0.3770117394226711]\n [0.18532803309577517, 0.23248748941275688, 0.14090166962667428]\n [0.5855387782654986, 0.22628968661452897, 0.5139790762185006]\n\njulia> reshape(reinterpret(Float64, B), (3, 8))\n3\xc3\x978 reshape(reinterpret(Float64, ::Array{SArray{Tuple{3},Float64,1,3},1}), 3, 8) with eltype Float64:\n 0.153872 0.361708 0.39703 0.405625 0.0881371 0.390133 0.185328 0.585539\n 0.467841 0.846298 0.884588 0.798848 0.14218 0.156283 0.232487 0.22629\n 0.390566 0.897737 0.569882 0.491681 0.499163 0.377012 0.140902 0.513979\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6070 次 |
| 最近记录: |