matlab建立以字母为横轴的直方图?

letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ';numMat=randi(length(letters),20,20);....letterMa... letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';numMat = randi(length(letters), 20, 20);....letterMat = letters(numMat); % manually count the occurrences of the individual lettersletterHist = zeros(1, length(letters));for l = letters lpos = find(letters == l); letterHist(lpos) = sum(sum(l == letterMat));end在for循环里,for l =letters是什么意思,是等同于l从1到26吗?for循环里第三行I == letterMat是什么意思? 展开
 我来答
lhmhz
高粉答主

2020-01-27 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17014

向TA提问 私信TA
展开全部

问题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函数二次,一次是列向量求和,二次是行向量求和
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式