如何在Julia中从数组{Float64,2}转换为数组{Array{Float64,1},1}

如何在Julia中从数组{Float64,2}转换为数组{Array{Float64,1},1},julia,Julia,因此,我一直在使用一个名为mydata的数据集(我自己创建的),它是一个10000元素数组{Array{Float64,1},1}:。问题是,我使用writedlm(“mydata”,mydata)将它存储到我的计算机中,现在,当我使用readdlm(“mydata,mydata)读取它时,我恢复了数组{Float64,2}:类型的矩阵 问题是: 有没有一种简单的方法可以将数据读取为10000个元素的数组{Array{Float64,1},1}:,或者至少转换我的数据 矩阵到数组{Array{

因此,我一直在使用一个名为
mydata
的数据集(我自己创建的),它是一个
10000元素数组{Array{Float64,1},1}:
。问题是,我使用
writedlm(“mydata”,mydata)
将它存储到我的计算机中,现在,当我使用
readdlm(“mydata,mydata)
读取它时,我恢复了
数组{Float64,2}:
类型的矩阵

问题是:

  • 有没有一种简单的方法可以将数据读取为
    10000个元素的数组{Array{Float64,1},1}:
    ,或者至少转换我的数据 矩阵到
    数组{Array{Float64,1},1}:
    类型

谢谢

您可以使用
[:]
运算符删除维度:

julia> a=rand(2,3)
2×3 Array{Float64,2}:
 0.896784  0.653296  0.939789
 0.113942  0.178925  0.470658


julia> @view a[:]
6-element view(::Array{Float64,1}, :) with eltype Float64:
 0.8967838440135203
 0.1139418024781611
 0.6532956345656487
 0.17892503362478984
 0.9397886609896129
 0.4706578162765451
上述代码的优点是不复制任何数据,因此这实际上是零成本

还有一个
重塑(a,6)
(或者更一般地说,
重塑(a,长度(a))
)选项,它既不复制数据也不复制数据(您仍然可以获得对相同内存位置的引用)

最后,请注意,您可能希望使用
数组
切片运算符来实际确保只获取第一列(同样
@view
避免数据复制):


除了Przemyslaw显示的模式外,我还经常使用:

julia> a=rand(2,3)
2×3 Array{Float64,2}:
 0.946128  0.902697  0.831427
 0.647748  0.934436  0.221258

julia> vec(a)
6-element Array{Float64,1}:
 0.9461283739840134
 0.6477484162303082
 0.9026969223072401
 0.934435667665475
 0.8314267308266441
 0.22125755489262455

vec(a)
的结果也与
a
共享数据(因此不存在复制),并且它可以比
@view a[:]
稍快一些,因为它是一个普通向量而不是视图。

要获得向量向量向量,可以编写

collect(eachcol(a)) 
编辑:为了获得一个普通的
数组{Array{Float64,1},1}
,您可以使用

collect.(eachcol(a))

@Przemyslaw:好的,但这允许我访问数组的行或列,但实际上并不能将
数组{Float64,2}
转换为
数组{array{Float64,1},1}
,对吗?。我的想法更像:
Input=rand(10,10);Irows=大小(输入,1);输出=数组{Array{Float64,1},1}(未定义,Irows);对于i=1:Arows输出[i]=Input[i,:];结束
@DFN正常
collect(eachcol(a))
给出了一个看起来像我正在寻找的输出(相同的形状:单个向量行),但是什么是
数组{SubArray{Float64,1,Array{Float64,2},Tuple{Base.Slice{Base.OneTo{Int64},Int64},true},1}:
类型数组?从未见过这种复杂的类型。。。是否只有
数组{Array{Float64,1},1}
这意味着基础数据在新旧数据结构之间共享。确定。总之,有没有办法将输出转换成一个简单的
Array{Array{Float64,1},1}
copy(例如eachcol(a))
collect.(eachcol(a))