在How to convert an array of array into a matrix?中,我们学习了如何将数组数组转换为矩阵。但另一种方式呢?我们如何从input
转到output
,如下所示?
input = [1 2 3; 4 5 6; 7 8 9]
output = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
答案 0 :(得分:10)
如果您想复制数据,那么:
[input[i, :] for i in 1:size(input, 1)]
如果您不想复制数据,可以使用视图:
[view(input, i, :) for i in 1:size(input, 1)]
经过一番思考后,这些是使用广播的替代方案:
getindex.([input], 1:size(input, 1), :)
view.([input], 1:size(input, 1), :)
答案 1 :(得分:2)
我也添加了一个替代方案:
mapslices(x->[x], input,2)
编辑:
警告!现在我看到mapslices
返回3x1矩阵了! (你可以改变它:mapslices(x->[x], input,2)[:,1]
)
我不满意。我不喜欢我们发现的任何解决方案。它们太复杂了(想想如何向孩子解释它!)。
在doc中也很难找到像mapslices
这样的函数。 BTW有一个非导出的Base.vect
函数可以用来代替匿名x->[x]
。
我当时认为使用更大的锤子有时会更聪明。所以我试着用DataFrames
julia> using DataFrames
julia> DataFrame(transpose(input)).columns
3-element Array{Any,1}:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
DataFrame.rows
我希望朱莉娅可以为我们提供更好的解决方案! :)