我试图找出每个字母出现在单元格数组中的次数。
我必须在Matlab中打开这个数据文件
A 12 A 88
B 23 F 22
C 55 B 77
D 66 H 44
我将其命名为Thor.dat
,这是我在Matlab中的代码
fid = fopen('Thor.dat')
if fid == -1
disp ('File open not successful')
else
disp ('File open is successful')
mat = textscan(fid,'%c %f %c %f')
[r c] = size(mat)
charoccur(mat)
fclose(fid)
end
并且charoccur
函数是
function occurence = charoccur(mat)
% charoccur finds the number of times each character appears in a column
[row, col] = size(mat);
[row, ccol] = size(mat{1});
[mat] = unique(mat{i})
d = hist(c,length(a))
end
答案 0 :(得分:0)
以下是使用unique
和strcmp执行此操作的方法。基本上循环通过单元格数组并将每个唯一字母的出现次数相加。使用strcmp
给出逻辑数组0和1.通过对1进行求和,可以得到找到字母的总次数。
clear
clc
%// Input cell array
mat = {'A' 12 'A' 88;'B' 23 'F' 22;'C' 55 'B' 77;'D' 66 'H' 44;'W' 11 'C' 9;'H' 3 'H' 0};
mat = [mat(:,1) mat(:,3)]
%// Find unique letters
UniqueLetters = unique(mat);
%// Initialize output cell
OutputCell = cell(numel(UniqueLetters,2));
%// Loop through each unique letter and count number of occurence
for k = 1:numel(UniqueLetters);
%// 1st column: letter
OutputCell(k,1) = UniqueLetters(k);
%// 2nd column: sum of occurences
OutputCell(k,2) = {sum(sum(strcmp(UniqueLetters{k},mat)))};
end
OutputCell
OutputCell
现在看起来像这样:
OutputCell =
'A' [2]
'B' [2]
'C' [2]
'D' [1]
'F' [1]
'H' [3]
'W' [1]
希望有助于您入门!
修改强>
根据您的评论,对于输出单元阵列的初始化:
OutputCell = cell(numel(UniqueLetters,2));
我创建了一个Nx2单元阵列,其中N(行数)是通过调用unique
标识的唯一单元的数量。在上面的例子中有7个独特的字母,所以我创建了一个7x2单元格数组来存储:
1)在第1栏中的实际字母
2)在第2列中,mat