请帮我解决以下问题:
在matlab中,我有一个Nx3 char变量,其中N可以根据输入而变化。 让我们说N = 5,我有以下变量A(5x3 char):
A = [' 1Y';
' 5Y';
'10Y';
'15Y';
'20Y']
有没有办法定义一个新变量B,其值为变量A中的数字,即B=[1; 5; 10; 15; 20]
?
感谢您的帮助!
答案 0 :(得分:5)
由于您的输入是字符数组,因此首先将每行转换为单元格,以便与MATLAB中的字符串函数一起使用:
out = mat2cell(val, ones(size(val,1),1));
mat2cell
将矩阵转换为一系列单元格。在我们的例子中,您希望有5个单元格,或者与矩阵val
中的行数一样多的单元格,并且每个单元格与val
中的列总数一样长。
执行此操作后,您可以将Y
字符串替换为空,然后转换为数字:
out = strrep(out, 'Y', '');
out2 = cellfun(@str2num, out);
第一行使用strrep
替换任何Y
的实例,然后我们在每个单元格上应用str2num
以将修剪后的字符串转换为实际数字。这是通过使用cellfun
,以便我们可以遍历每个单元格,将str2num
应用于每个单元格。
我们得到:
out2 =
1
5
10
15
20
完全可重复:
val = ['1Y '; '5Y '; '10Y'; '15Y'; '20Y'];
out = mat2cell(val, ones(size(val,1),1), size(val,2));
out = strrep(out, 'Y', '');
out2 = cellfun(@str2num, out);
答案 1 :(得分:3)
假设您有以下内容:
A = [' 1Y';
' 5Y';
'10Y';
'15Y';
'20Y';]
然后这应该可以解决问题:
B=A'
C=strsplit(B(:)','Y')
V=cellfun(@str2num,C(1:end-1))
答案 2 :(得分:1)
这是将cellstr
转换为其数值的方法:
a = {'1'};
ans1 = int64(str2num(a{1}));