我想检查字符串长度超过20个字符,如果超过20则返回1,否则以矩阵形式返回0 [n x 1]。但是现在,我得到了[1x1]的答案。如何修改if-else语句中的代码以获取ans?
str = {'http://www.mathworks.com/matlabcentral/newsreader/view_thread/324182',
'http://jitkomut.lecturer.eng.chula.ac.th/matlab/text.html',
'http://www.ee.ic.ac.uk/pcheung/teaching/ee2_signals/Introduction%20to%20Matlab2.pdf'};
a = cellfun(@length,str)
if a > 20
'1'
else
'0'
end
输出: a =
68
57
83
ans =
1
我想要输出,让我们说
ans =
1
1
1
答案 0 :(得分:3)
在Matlab中,您可以简单地使用(不需要if
语句):
a = cellfun(@length,str)
(a>20)'
这会给你:
a =
68 57 83
ans =
1
1
1
答案 1 :(得分:3)
由于matlab中没有等效的三元运算符(?:),您可以使用以下两个语句来替换if then else
语句,并实现您的要求:
b(a==a)='0'
b(a>20)='1'
第一行初始化结果数组,其中所有值b
默认为else
分支的值,即'0'
,
第二行将条件> 20
所持有的元素更改为then
分支中的值,即'1'
。
如果输出值是布尔值,您只需执行:
(a>20)
正如@herohuyongtao建议或使用@Dan的答案。
答案 2 :(得分:2)
正如@herohuyongtao所提到的,你实际上并不需要if
,if
只会考虑它返回的矩阵的第一个元素,因此只给你一个值。
但是你可以通过使用匿名函数在cellfun
中实现这一切:
cellfun(@(x)(length(x) > 20), str)
一次性获得结果。