向量在matlab中的条目查找

时间:2011-05-26 05:32:39

标签: matlab

给定一个向量 U nx 1 ,其中包含来自 0,1,2,3 的条目,我想创建另一个向量 V 以char类型表示条目
     U 中的0将在 V 中为'0'      U 中的1将在 V 中为“1”      U 中的2将在 V 中为“12”      U 中的3将在 V

中为“123”

在matlab中最好的方法是扫描向量中的每个条目,然后使用switch case?

5 个答案:

答案 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的解决方案远非优越。见上文。