Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算列中字符串的出现次数-Matlab_Matlab_Unique_Accumarray - Fatal编程技术网

计算列中字符串的出现次数-Matlab

计算列中字符串的出现次数-Matlab,matlab,unique,accumarray,Matlab,Unique,Accumarray,我有一列包含以下数据: 尺寸:100x7 我想在饼图上显示数据。要做到这一点,我需要知道在本专栏中有多少美国发生,等等。 我读过accumarray的独特功能,但我没有成功 我想得到一些建议如何做到这一点。谢谢。这将通过使用regexp提供出现次数: unique_countries = unique(regexp(val,'^.*$','lineanchors','match','dotexceptnewline')); count_unique_countries = zeros(size

我有一列包含以下数据: 尺寸:100x7

我想在饼图上显示数据。要做到这一点,我需要知道在本专栏中有多少美国发生,等等。 我读过accumarray的独特功能,但我没有成功
我想得到一些建议如何做到这一点。谢谢。

这将通过使用regexp提供出现次数:

unique_countries = unique(regexp(val,'^.*$','lineanchors','match','dotexceptnewline'));

count_unique_countries = zeros(size(unique_countries));
for ii = 1:numel(unique_countries)
    count_unique_countries(ii) = numel(regexp(val,['^' unique_countries{ii} '$'],'lineanchors'));
end
这两个输出变量现在是

unique_countries = 
'France'    'USA'
count_unique_countries =
 1     2

这将通过使用regexp提供出现的次数:

unique_countries = unique(regexp(val,'^.*$','lineanchors','match','dotexceptnewline'));

count_unique_countries = zeros(size(unique_countries));
for ii = 1:numel(unique_countries)
    count_unique_countries(ii) = numel(regexp(val,['^' unique_countries{ii} '$'],'lineanchors'));
end
这两个输出变量现在是

unique_countries = 
'France'    'USA'
count_unique_countries =
 1     2
使用的第三个输出,并确保这些输入字符串位于单元格数组中。unique的第三个输出非常酷,因为它为输入中看到的每个唯一数量分配一个唯一ID。同样地,如果您有一个从a到e的字符序列,它将为找到的每个唯一字符分配一个唯一的ID,介于1到5之间。另外,unique的第一个输出提供了一个数组,该数组只包含在输入中看到的唯一数量

然后,您可以使用第三个输出来计算在列出的所有国家中看到特定国家的次数

val = {'USA'; 'USA'; 'France'; 'USA'; 'France'};
[countries,~,id] = unique(val);
counts = accumarray(id, 1);
我得到:

counts = 

2 
3
也适用于以下国家:

请注意,计数的每个元素对应于您看到特定国家与国家中的国家处于相同位置的次数,因此法国显示2次,美国显示3次。

使用的第三个输出,并确保这些输入字符串位于单元格数组中。unique的第三个输出非常酷,因为它为输入中看到的每个唯一数量分配一个唯一ID。同样地,如果您有一个从a到e的字符序列,它将为找到的每个唯一字符分配一个唯一的ID,介于1到5之间。另外,unique的第一个输出提供了一个数组,该数组只包含在输入中看到的唯一数量

然后,您可以使用第三个输出来计算在列出的所有国家中看到特定国家的次数

val = {'USA'; 'USA'; 'France'; 'USA'; 'France'};
[countries,~,id] = unique(val);
counts = accumarray(id, 1);
我得到:

counts = 

2 
3
也适用于以下国家:

请注意,计数的每个元素对应于您看到特定国家与国家中的国家处于相同位置的次数,因此法国被看到2次,美国被看到3次。

您可以将unique与histc一起使用-

然后,您可以将国家/地区名称的出现次数显示为一个表格-

将输出显示为饼图-

您可以将unique与histc一起使用-

然后,您可以将国家/地区名称的出现次数显示为一个表格-

将输出显示为饼图-


如果您有统计工具箱,还可以执行以下操作:

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);

如果您有统计工具箱,还可以执行以下操作:

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);

这只能找到一个国家。问题是要查找所有国家/地区。要使此操作适用于所有国家/地区,可能需要查找列表中所有唯一的国家/地区,然后使用regexp并在每个唯一的国家/地区上循环,但与使用hist/accumarray的唯一相比,此操作的效率值得怀疑。感谢您的评论。我编辑了解决方案以查找所有国家/地区的出现次数。正如您所提到的,它将首先找到unique和regexp组合的唯一国家。这只会找到一个国家。问题是要查找所有国家/地区。要使此操作适用于所有国家/地区,可能需要查找列表中所有唯一的国家/地区,然后使用regexp并在每个唯一的国家/地区上循环,但与使用hist/accumarray的唯一相比,此操作的效率值得怀疑。感谢您的评论。我编辑了解决方案以查找所有国家/地区的出现次数。正如您所提到的,它将首先找到unique和regexp.Nice组合的独特国家。我不知道派的事。这肯定是公认的答案。@rayryeng Google最近帮了大忙!:美好的我不知道派的事。这肯定是公认的答案。@rayryeng Google最近帮了大忙!: