给定一个向量 U nx 1 ,其中包含来自 0,1,2,3 的条目,我想创建另一个向量 V 以char类型表示条目
U 中的0将在 V 中为'0'
U 中的1将在 V 中为“1”
U 中的2将在 V 中为“12”
U 中的3将在 V
在matlab中最好的方法是扫描向量中的每个条目,然后使用switch case?
答案 0 :(得分:1)
创建anonymous function以将一个元素转换为所需的输出,然后使用ARRAYFUN将此函数应用于所有输入:
>> f = @(x) sprintf('%u', sum(10.^((x-1):-1:0) .* (1:x))); >> x = 0:3 x = 0 1 2 3 >> c = arrayfun(f, x, 'UniformOutput', 0) c = '0' '1' '12' '123'
答案 1 :(得分:1)
我认为最简单的方法是创建一个包含4个字符串值的单元格数组'C',然后使用U+1
索引数组:
>> C = {'0' '1' '12' '123'}; %# Cell array with 4 strings corresponding to 0..3
>> U = [0 1 2 3 2 1 0]; %# Sample U vector
>> V = C(U+1) %# Index C with U+1
V =
'0' '1' '12' '123' '12' '1' '0'
如果你想让V
成为单个字符串而不是字符串的单元格数组,那么你可以这样做:
>> V = [C{U+1}]
V =
01121231210
答案 2 :(得分:1)
您可以轻松地定义一组规则并将其编入索引。
rules={'0','1','12','123'};
out=rules(A+1)
在上文中,A
是您拥有的矢量。
答案 3 :(得分:0)
我想用你在那里给出的一对对象创建一个hashmap。每次要基于U插入V时,将与U的条目值对应的值插入到V中。如果U [0] = 2,则执行V [0] = myMap.get(2),或者MATLAB语法。
答案 4 :(得分:-1)
这是一个矢量化的版本,是惯用的Matlab:
然而,这实际上进行了4次线性扫描。如果您真的想要更高的效率,请编写C mex函数。
V = cell(size(U));
V{U==0} = '0';
V{U==1} = '1';
V{U==2} = '12';
V{U==3} = '123';
修改强>
gnovice的解决方案远非优越。见上文。