MATLAB - 将数字字符数组转换为数字整数数组/矩阵?
问题描述:
我的问题:我有一个数组类型char的A,读取这样的:MATLAB - 将数字字符数组转换为数字整数数组/矩阵?
196800271010
902589451069
052068830384
901778191098
我想打开阿到将字符分离成单个的数目的整数,像这样的数值矩阵
[1 9 6 8 0 0 2 7 1 0 1 0
9 0 2 5 8 9 4 5 1 0 6 9
0 5 2 0 6 8 8 3 0 3 8 4
9 0 1 7 7 8 1 9 1 0 9 8]
这是什么最好的方法? 我试过 str2num(A),但对待字符每行一个整数(即第一行是1.9680) 我也试过这个for循环
for i = 1:5 %the number of rows in the char array
s = num2str(A(i,:));
for t = length(s):-1:1
result(t) = str2num(s(t));
end
end
但这只是返回数组的最后一行,我想要所有这些。
答
我不知道你为什么要转换两次。只需通过两个索引并转换每个字符并将其放入新矩阵。
for i = 1:size(A,1)
for t = 1:size(A,2)
result(i,t) = str2num(A(i,t));
end
end
PS:预分配result
befoor环路将增加速度:
result = zeros(size(A))
答
如果您将您的矩阵成列向量,每个角色将定位于不同的行,以便它可以是由str2num
独立处理。然后reshape
回:
result = reshape(str2num(A(:)), size(A))
答
矩阵RESULT1是你想要的。
答
埃坦T的答案可能是最好的。它更干净,可能更快。但是有一些相关的索引问题需要指出。
如果您知道输入字符都是数字,您可以使用Unicode字符值的技巧,使用字符'0'到'9'是连续的。
result = double(A) - double('0');
你的原代码几乎作品,除非你没有到结果使用i
索引,所以你改写同一行上分别通过该外环。使用这两个索引,结果将得到正确的形状。
for i = 1:5 %the number of rows in the char array
s = num2str(A(i,:));
for t = length(s):-1:1
result(i,t) = str2num(s(t));
end
end
这会得到你想要的输出。但有些问题稍后会出现。 num2str()
调用是多余的,因为数据已经是char;你可以删除它。您可以使用A(i,t)
而不是s
。并且str2double
通常比str2num
更快和更安全,因为str2num
在幕后调用eval
。
但是,您也可以在一个循环中迭代多维数组中的每个元素。这是一个更一般的方法。当您使用单个索引时,Matlab将线性索引到数组中,而不管其维数如何。
result = NaN(size(s));
for i = 1:numel(s)
result(i) = str2double(s(i));
end
请不要将代码作为屏幕截图发布,一个简单的剪切和粘贴会做。 – 2013-03-13 21:18:55
@EitanT明白了。谢谢! – tqjustc 2013-03-14 00:21:42