如何将矩阵转换为数组数组?

时间:2018-01-14 22:46:16

标签: arrays matrix multidimensional-array julia

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]]

2 个答案:

答案 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]
  1. 遗憾的是,没有DataFrame.rows
  2. 结果的类型是数组{任何,1}
  3. 我觉得它不会很快
  4. 我希望朱莉娅可以为我们提供更好的解决方案! :)