计算或只读取实际条目
Count or read only actual entries
如何只计算或读取列的实际条目,以区别于非零条目?
换句话说,如果我有文件:
4000,1,5221,0
4001,0,5222,1
4002,3,,,
第 4 列有 2 个实际条目,其中一个消失了。我可以这样计算条目:
R = csvread("bugtest.csv");
for i = 1:4
VanishingColEntries(i) = numel (find (R(:,i) ==0));
NonVanishingColEntries(i) = nnz(R(:,i));
endfor
VanishingColEntries
NonVanishingColEntries
产量:
octave:2> nument
VanishingColEntries =
0 1 1 2
NonVanishingColEntries =
3 2 2 1
但是,我不知道如何提取“实际”条目的数量,即非零条目和显式零条目的总和!
csvread
仅适用于数字数据。如果 csvread
遇到一个不是严格数字的条目,它会检查字符串是否以数字开头,并将其用作结果(例如 1direction, 2pac, 7up
将导致 1,2,7
)。 'Empty' 这里的条目实际上被认为是一个空字符串,被解析为数字 0。但是,还有一些特殊的字符串,如 nan
和 inf
被特殊解析。
如果您可以/乐于预处理您的 csv 文件,那么您可以将所有空条目替换为字符串 nan
(不带引号)。 csvread
然后将特殊处理此字符串,并在生成的数字矩阵中将其替换为实际的 nan
值。然后,您可以将其与 isnan
一起使用来计算 nan / non-nan 条目的数量,如下所示:
R = csvread( 'bugtest.csv' );
% Count nan / non-nan entries along rows
VanishingColEntries = sum( isnan( R ), 1 )
NonVanishingColEntries = sum( ~isnan( R ), 1 )
如果您没有预处理 csv 文件的奢侈(或者您只是想在整个过程中以编程方式处理它,而不需要人工干预),那么您可以使用 csv2cell
中的函数 io
打包,然后处理生成的单元格以获得您想要的内容,例如
pkg load io
C = csv2cell( 'bugtest.csv' )
% Convert cells with empty strings to nan
for i = 1 : numel(C), if ischar(C{i}), C{i} = nan; endif, endfor
% Convert numeric cell array (nan is a valid number) to a matrix
R = cell2mat( C );
然后您可以像以前一样使用 isnan
来获得结果。
如何只计算或读取列的实际条目,以区别于非零条目?
换句话说,如果我有文件:
4000,1,5221,0
4001,0,5222,1
4002,3,,,
第 4 列有 2 个实际条目,其中一个消失了。我可以这样计算条目:
R = csvread("bugtest.csv");
for i = 1:4
VanishingColEntries(i) = numel (find (R(:,i) ==0));
NonVanishingColEntries(i) = nnz(R(:,i));
endfor
VanishingColEntries
NonVanishingColEntries
产量:
octave:2> nument
VanishingColEntries =
0 1 1 2
NonVanishingColEntries =
3 2 2 1
但是,我不知道如何提取“实际”条目的数量,即非零条目和显式零条目的总和!
csvread
仅适用于数字数据。如果 csvread
遇到一个不是严格数字的条目,它会检查字符串是否以数字开头,并将其用作结果(例如 1direction, 2pac, 7up
将导致 1,2,7
)。 'Empty' 这里的条目实际上被认为是一个空字符串,被解析为数字 0。但是,还有一些特殊的字符串,如 nan
和 inf
被特殊解析。
如果您可以/乐于预处理您的 csv 文件,那么您可以将所有空条目替换为字符串 nan
(不带引号)。 csvread
然后将特殊处理此字符串,并在生成的数字矩阵中将其替换为实际的 nan
值。然后,您可以将其与 isnan
一起使用来计算 nan / non-nan 条目的数量,如下所示:
R = csvread( 'bugtest.csv' );
% Count nan / non-nan entries along rows
VanishingColEntries = sum( isnan( R ), 1 )
NonVanishingColEntries = sum( ~isnan( R ), 1 )
如果您没有预处理 csv 文件的奢侈(或者您只是想在整个过程中以编程方式处理它,而不需要人工干预),那么您可以使用 csv2cell
中的函数 io
打包,然后处理生成的单元格以获得您想要的内容,例如
pkg load io
C = csv2cell( 'bugtest.csv' )
% Convert cells with empty strings to nan
for i = 1 : numel(C), if ischar(C{i}), C{i} = nan; endif, endfor
% Convert numeric cell array (nan is a valid number) to a matrix
R = cell2mat( C );
然后您可以像以前一样使用 isnan
来获得结果。