Octave 仅从 CSV 中读取一列 - 未知范围
Octave read just one column from CSV - unknown range
我想阅读包含许多列的 CSV,但我只想阅读其中的一列。我找到函数 dlmread().
“参数的第一种形式是包含左上角和右下角 [R0,C0,R1,C1] 的 4 元素向量,其中索引从零开始”
M = dlmread('/home/lukas/deetction/tile_16.csv,'\t', [2, 1, unknown, 1])
问题是我不知道会有多少行,每个文件都不一样。我如何定义 R1 以读取尽可能多的行?如果我定义整个范围 [2,1,10,1],该函数可以工作,但是如何定义未知的 R1?
或者我应该读取 CSV 以获得行数未知的一列。
简答:
对未知数 R1
使用 NaN
。
详细答案:
在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
使代码与两个平台兼容并避免可能的混淆。
在 GNU Octave 4.3.0+(今天是从 4.4 版本的源代码和基础构建的开发版本)中,您可以使用 inf
来表示未知大小(这与 Sardar 的答案形成对比) .
这已更改 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
我想阅读包含许多列的 CSV,但我只想阅读其中的一列。我找到函数 dlmread().
“参数的第一种形式是包含左上角和右下角 [R0,C0,R1,C1] 的 4 元素向量,其中索引从零开始”
M = dlmread('/home/lukas/deetction/tile_16.csv,'\t', [2, 1, unknown, 1])
问题是我不知道会有多少行,每个文件都不一样。我如何定义 R1 以读取尽可能多的行?如果我定义整个范围 [2,1,10,1],该函数可以工作,但是如何定义未知的 R1?
或者我应该读取 CSV 以获得行数未知的一列。
简答:
对未知数 R1
使用 NaN
。
详细答案:
在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
使代码与两个平台兼容并避免可能的混淆。
在 GNU Octave 4.3.0+(今天是从 4.4 版本的源代码和基础构建的开发版本)中,您可以使用 inf
来表示未知大小(这与 Sardar 的答案形成对比) .
这已更改 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