Replace String Value in Cell with Numerical Value

1 次查看(过去 30 天)
Hi all
I like to replace a string value in a cell with a numerical value.
The cell looks like:
A1 = {-1,0,0,0,0,0,0;1,-1,0,0,-1,0,0;0,1,1,-1,0,0,0;0,1,1,-1,0,0,0;0,0,1,0,0,0,0;0,0,0,'C.C4',0,0,0;0,0,0,0,1,1,-1;0,0,0,0,0,1,0;0,0,0,0,0,0,'C.C5'}
I like to replace the string C.C4 and C.C5 with numerical values like: C.C4 = 2; C.C5 = 3;
I already burnt hours on this problem! Thanks a lot for your help (-:
Cheers, Chris
  1 个评论
Guillaume
Guillaume 2018-2-16
Why does 'C.C4' get replaced by 2 and 'C.C5' by 3 (instead of 4 and 5 or something more logical)?

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2018-2-19
编辑:Stephen23 2018-2-19
A = {'Inf','C.C3','C.C2',1;'-Inf',1,'C.C5','Inf';'C.C4',0,0,'-Inf';0,0,1,'-Inf'};
idn = cellfun(@isnumeric,A); % identify numeric values.
out = nan(size(A)); % preallocate output matrix.
out(idn) = [A{idn}]; % allocate numeric values.
tmp = A(~idn); % subset with char vectors.
vec = str2double(tmp); % attempt to convert to numeric.
idx = isnan(vec); % identify char not converted.
C = {'C.C2','C.C3','C.C4','C.C5','C.C6'};
V = [ 10, 100, 34, 35, 100];
[idm,idc] = ismember(tmp(idx),C); % lookup table.
assert(all(idm),'Not in C:%s',sprintf(' %s,',C{~idm}))
vec(idx) = V(idc);
out(~idn) = vec
giving this numeric matrix:
out =
Inf 100 10 1
-Inf 1 35 Inf
34 0 0 -Inf
0 0 1 -Inf
An alternative to throwing an error for missing C.Cx strings would be to put a NaN in that position:
[idm,idc] = ismember(tmp(idx),C) % lookup table.
tmp = nan(size(idc));
tmp(idm) = V(idc(idm))
vec(idx) = tmp;
out(~idn) = vec

更多回答(1 个)

Guillaume
Guillaume 2018-2-16
Identifying the char elements is easy. And once the rule for replacing them by numbers is known, replacing them is also easy:
toreplace = cellfun(@ischar, A1);
A1(toreplace) = num2cell((1:sum(toreplace(:))) + 1) %arbitrary rule that replace char arrays by numbers 2, 3, 4, ...
After that you probably want
A1 = cell2mat(A1)
  1 个评论
chris1976
chris1976 2018-2-19
Hi all! Thx for your answers. I couldn't solve my problem yet. I like to specify as follows:
My cell array looks for example like this (mixed string and numeric values out of xlsread):
A1 = {'Inf','C.C3','C.C2',1;'-Inf',1,'C.C5','Inf';'C.C4',0,0,'-Inf';0,0,1,'-Inf'}
I want to replace the following string values (variables) with numeric values for example:
C.C2 = 10 C.C4 = 34 C.C5 = 25 C.C6 = 100
And I like to change the string value "Inf" resp. "-Inf" to numeric Inf and -Inf (infinite and negativ infinite).
I tried with your solutions but couldn't do it - maybe because I specified my problem too little.
Hope you may help! Thx a lot in advance. Cheers, Chris

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by