在Matlab中进行向量条目查找

问题描述

| 给定一个向量U n x 1,它包含来自0,1,2,3的项,我想创建另一个char类型的向量V,使该项     U中的0将在V中为\'0 \'     U中的1将在V中为\'1 \'     U中的2将在V中为\ '12 \'     U中的3在V中为\'123 \' 在MATLAB中而不是扫描向量中的每个单独条目然后使用切换大小写的最佳方法是什么?     

解决方法

您可以轻松定义一组规则并对其进行索引。
rules={\'0\',\'1\',\'12\',\'123\'};
out=rules(A+1)
在上面,
A
是您拥有的向量。     ,创建一个匿名函数将一个元素转换为所需的输出,然后使用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 \'     ,我认为最简单的方法是创建一个包含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
    ,我想用您在此处提供的一组配对创建一个哈希表。每次您要基于U插入V时,请插入与U成V项的值的键配对的值。如果U [0] = 2,则执行V [0] = myMap.get(2),或者使用任何MATLAB语法。     ,这是一个惯用的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的解决方案优越得多。往上看。