matlab建立以字母为横轴的直方图?
问题1:在for循环里,for l =letters是什么意思,是等同于l从1到26吗?
答:在for循环里,for l =letters的意思就是,l ='ABCDEFGHIJKLMNOPQRSTUVWXYZ',类似于l =1:26
问题2:for循环里第三行I == letterMat是什么意思?
答:for循环里第三行I == letterMat的意思就是,当I 恒等于 letterMat时,统计其个数
问题3:如何以'ABCDEFGHIJKLMNOPQRSTUVWXYZ'26个字母作为横轴的直方图?
答:①用bar()函数绘制直方图;②用set()函数,设置以26个字母作为横轴
实现的完整代码:
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
numMat = randi(length(letters), 20, 20);
letterMat = letters(numMat);
letterHist = zeros(1, length(letters));
for l = letters
lpos = find(letters == l)
letterHist(lpos) = sum(sum(l == letterMat));
end
bar(letterHist)
set(gca,'XTick',1:26)
set(gca,'XTickLabel',{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'})
运行后的效果
答:for循环里第三行I == letterMat的意思就是,当I 恒等于 letterMat时,统计其个数
请问l是某一个具体的字母的话,而letterMat是一串字母,为什么会有I 恒等于 letterMat,letterHist(lpos) = sum(sum(l == letterMat)); 还有请问这里为什么会有两个sum。
问题4:lpos = find(letters == l)的意思是查找letters 恒等于 l的数,赋值给 lpos 变量
问题5:为什么letterHist(lpos) = sum(sum(l == letterMat))中要用sum函数二次?
因为 letterMat 矩阵是二维矩阵,即20×20的字符矩阵,所以需要用sum函数二次,一次是列向量求和,二次是行向量求和