导入CSV文件作为矩阵

cbjzeqam  于 2023-04-27  发布在  其他
关注(0)|答案(4)|浏览(117)

我想导入一个CSV文件(file.csv)作为Julia中的矩阵,使用GR将其绘制为热图。我的CSV文件包含255行,每行255个条目。下面是CSV文件中的一些条目,以说明行的格式:

file.csv

-1.838713563526794E-8;-1.863045549663876E-8;-2.334704481052452E-8 ...
-1.7375447279939282E-8;-1.9194929690414267E-8;-2.0258124812468942E-8; ...
⋮
-1.1706980663321613E-8;-1.6244768693064608E-8;-5.443335580296977E-9; ...
  • 注意:* 省略号(...)不是CSV文件的一部分,而是表示省略了所有内容。

我尝试使用下面的m = CSV.read("./file.csv")行将文件导入为矩阵,但这会导致255 x 1向量而不是255 x 255矩阵。有人知道在Julia中将CSV文件导入为矩阵的有效方法吗?

o3imoua4

o3imoua41#

你可以用

using DelimitedFiles
m = readdlm("./file.csv", ';', Float64)

(last如果需要Float64,则可以省略指定类型的参数)

zdwk9cvp

zdwk9cvp2#

m = CSV.read("./file.csv")返回DataFrame
如果CSV.jl正确读取文件,使得m的所有列都是Float64类型,不包含missing s,那么你可以用Matrix{Float64}(m)m转换为Float64矩阵,或者用一行来获得矩阵:

m = Matrix{Float64}(CSV.read("./file.csv", header=0, delim=';'))
# or with piping syntax
m = CSV.read("./file.csv", header=0, delim=';') |> Matrix{Float64}

不过,readdlm通常应该足够了,并且是像您这样简单的CSV文件的第一个解决方案。

kmb7vmvb

kmb7vmvb3#

2022答案

不确定CSV.jl是否有更改,但是,如果我执行CSV.read("file.csv"),它将出错

provide a valid sink argument, like 'using DataFrames; CSV.read(source, DataFrame)'

但是,您可以使用它需要任何Tables.jl兼容类型的事实:

using CSV, Tables
M = CSV.read("file.csv", Tables.matrix, header=0)
u3r8eeie

u3r8eeie4#

虽然@user:1269567给出的readdlm答案简单明了,但它可能会遇到非常大的文本文件(无论如何,将大型数字数据存储为文本可能是一个坏主意,但这是另一个故事)-这就是我遇到这个问题的原因。除了CSV.jl之外,不使用其他包的有效方法如下:

using CSV
m = CSV.read("./file.csv", CSV.Tables.matrix; header=false)

CSV v0.10.9开始,假设文件中没有头。

相关问题