如何在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))