问题描述
我尝试转换单元格x:
x(1,:) = {'35,35,35'};
x(2,:) = {'40,40,30,40'};
x(3,:) = {'10,'};
到一个矩阵:
R = cell2mat(cellfun(@str2num,x,'un',0));
但结果省略了第一行:
R =
40 40 30 40
但我期待:
R =
35 35 0 35
40 40 30 40
10 0 0 0
这是怎么做到的? 谢谢!
解决方法
Split x
by ,
,使用 str2double
和 fill the missing values 和 0
转换为双精度,如下所示:
R = fillmissing(str2double(split(x,',')),'constant',0);
>> R
R =
35 35 0 35
40 40 30 40
10 0 0 0
注意:避免使用 str2num
,因为它是使用 eval
实现的。有关详细信息,请阅读 documentation 中的安全注意事项和使用它的意外副作用。
您必须手动完成。请尝试使用此脚本来实现您要搜索的内容
clear
clc
x(1,:) = {'35,35,35'};
x(2,:) = {'40,40,30,40'};
for i = 1: length(x)
v1 = split(x(i),",");
for j = 1:length(v1)
if length(str2num(v1{j}) )==0
oo(j)=0;
else
oo(j)= str2num(v1{j});
end
end
R(i,:) = oo(1,:);
end