Octave 计数或只读实际条目

Octave 计数或只读实际条目,octave,Octave,如何计算或仅读取列的实际条目,以区别于非零条目 换句话说,如果我有文件: 4000,1,5221,0 4001,0,5222,1 4002,3,,, 第4列有两个实际条目,其中一个消失。我可以这样计算条目: R = csvread("bugtest.csv"); for i = 1:4 VanishingColEntries(i) = numel (find (R(:,i) ==0)); NonVanishingColEntries(i) = nnz(R(:,i)); e

如何计算或仅读取列的实际条目,以区别于非零条目

换句话说,如果我有文件:

4000,1,5221,0
4001,0,5222,1
4002,3,,,
第4列有两个实际条目,其中一个消失。我可以这样计算条目:

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/非nan条目的数量:

R=csvread'bugtest.csv'; %沿行计数nan/非nan条目 VaningColentries=sum isnan R,1 非方差协熵=sum~isnan R,1 如果您没有对csv文件进行预处理的特权,或者您只是想在整个过程中以编程方式处理它,而不需要人工干预,那么您可以使用io包中的csv2cell函数,并处理生成的单元格以获得所需的内容,例如

打包加载io C=csv2cell'bugtest.csv' %将带有空字符串的单元格转换为nan 对于i=1:numelC,如果ischarC{i},C{i}=nan;endif,endfor %将数值单元格数组nan转换为矩阵的有效数字 R=C时的2号电池; 然后,您可以像以前一样使用isnan来获得结果。

csvread仅用于数字数据。如果csvread遇到的条目不是严格意义上的数字,它会检查字符串是否以数字开头,并使用该数字作为结果,例如1direction、2pac、7up将导致1,2,7此处的“Empty”条目实际上被视为空字符串,解析为数字0。但是,有一些特殊的字符串,比如nan和inf,它们是经过特殊解析的

如果您可以/乐意预处理csv文件,则可以将所有空条目替换为不带引号的字符串nan。csvread随后将专门处理该字符串,并在生成的数值矩阵中用实际nan值替换它。然后,您可以将其与isnan一起使用,按如下方式计算nan/非nan条目的数量:

R=csvread'bugtest.csv'; %沿行计数nan/非nan条目 VaningColentries=sum isnan R,1 非方差协熵=sum~isnan R,1 如果您没有对csv文件进行预处理的特权,或者您只是想在整个过程中以编程方式处理它,而不需要人工干预,那么您可以使用io包中的csv2cell函数,并处理生成的单元格以获得所需的内容,例如

打包加载io C=csv2cell'bugtest.csv' %将带有空字符串的单元格转换为nan 对于i=1:numelC,如果ischarC{i},C{i}=nan;endif,endfor %将数值单元格数组nan转换为矩阵的有效数字 R=C时的2号电池;
然后,您可以像以前一样使用isnan来获得结果。

您可以使用Ccellfun@isempty,C=NaN;代替for循环和if条件。因为,如果,endif,和endfor在一行中,我觉得不太好。但可能只有我一个人。使用csv2cell是个好主意btw@SardarUsama我更喜欢for loops而不是cellfun,所以答案很明确,以防引起更多的混乱。。。但除此之外,我同意这样看起来更好:顺便说一句,我故意使用ischar而不是isempty,因为虽然从给定数据中指出空插槽不包含空格,但这并没有指定,并且“”算作非空!:我真想知道你为什么用ischar。富有洞察力的你可以用Ccellfun@isempty,C=NaN;代替for循环和if条件。因为,如果,endif,和endfor在一行中,我觉得不太好。但可能只有我一个人。使用csv2cell是个好主意btw@SardarUsama我更喜欢for loops而不是cellfun,所以答案很明确,以防引起更多的混乱。。。但除此之外,我同意这样看起来更好:顺便说一句,我故意使用ischar而不是isempty,因为虽然从给定数据中指出空插槽不包含空格,但这并没有指定,并且“”算作非空!:我真想知道你为什么用ischar。富有洞察力的