我想阅读包含许多列的CSV,我想只阅读其中一个。我找到了函数dlmread()。
"参数的第一种形式是一个4元素向量,包含左上角和右下角[R0,C0,R1,C1],其中索引从零开始"
M = dlmread('/home/lukas/deetction/tile_16.csv,'\t', [2, 1, unknown, 1])
问题是我不知道会有多少行,每个文件都有所不同。我如何定义R1以读取尽可能多的行?如果我定义整个范围[2,1,10,1],但是如何定义未知的R1?
,该函数是否有效或者说sholud我读了CSV只得到一行行数不明。
答案 0 :(得分:0)
对未知NaN
使用R1
。
在 Octave 中,诀窍是将未知R1
定义为NaN
或-inf
或任何大于或等于最大数量的整数行包括inf
。即。
1∈{, - }∪[,]
如果C1
未知,您可以选择C1
为大于最大列数的整数值(inf
除外)。
感谢AndrasDeak在Octave 4.0.3中对此进行测试。
但是在 MATLAB 中,您可以选择R1
为NaN
或任何小于R0
的整数值,包括-inf
(或最大数量)尽管你的情况不明确的行)。
1∈{,}∪[ - ,0-1]
请注意,此技巧仅适用于选择R1
。您无法以相同的方式选择C1
。
因此,对于未知NaN
,我希望R1
使代码与两个平台兼容,并避免可能的混淆。
答案 1 :(得分:0)
在GNU Octave 4.3.0+(今天是从4.4版本的源和基础构建的开发版本)中,您可以使用inf
来获取未知大小(这与Sardar的答案形成对比)。 / p>
这已被更改with this changeset on stable并且将成为4.2.2修正版本(如果有一个..)或下一个稳定版本4.4的一部分。
看起来此行为已从4.0.3更改
% create sample data 5 rows, 3 columns
x = (1:3)+(10:10:50).'
csvwrite ("foo", x)
clear all
% read second column until end
dlmread ("foo", ",", [0 1 inf 1])
给出
x =
11 12 13
21 22 23
31 32 33
41 42 43
51 52 53
ans =
12
22
32
42
52