我有一个.csv文件,我想读取到Octave中(最初尝试使用csvread)。它花的时间太长了,所以我试着使用R来解决这个问题:How to read large matrix from a csv efficiently in Octave这是我在R中做的:
forest_test=read.csv('forest_test.csv')
library(R.matlab)
writeMat("forest_test.mat", forest_test_data=forest_test)然后我回到Octave,做了这个:
forest_test = load('forest_test.mat')这不是给我一个矩阵,而是一个结构。我做错了什么?
发布于 2014-08-17 22:18:53
为了准确回答您的问题,您使用了错误的load函数。如果您只想将文件中的变量插入到工作区中,则不能将其输出赋值给变量。来自Octave的load帮助文本:
如果使用单个输出参数调用,Octave将返回数据,而不是在符号表中插入变量。如果数据文件仅包含数字(以制表符或空格分隔的列),则返回一个值矩阵。否则,“load”将返回一个结构,其成员与文件中变量的名称相对应。
以我们的案例为例:
## inserts all variables in the file in the workspace
load ("forest_test.mat");
## each variable in the file becomes a field in the forest_test struct
forest_test = load ("forest_test.mat");但是,你发布的关于Octave在处理CSV文件时速度很慢的链接仍然参考了Octave 3.2.4,这是一个相当旧的版本。您是否确认在最近的版本(上一版本是3.8.2)中仍然是这种情况。
发布于 2014-08-17 15:27:34
有一个用于将数据帧转换为矩阵的函数:
?data.matrix
forest_test=data.matrix( read.csv('forest_test.csv') )
library(R.matlab)
writeMat("forest_test.mat", forest_test_data=forest_test)https://stackoverflow.com/questions/25346314
复制相似问题