替换单元格数组中的值以匹配另一个的值

时间:2014-02-26 18:36:55

标签: matlab match cell-array

MATLAB中有一个cell数组

B = 

    [ 1708]    [ 2392]    '+'
    [ 3394]    [ 3660]    '+'
    [ 5490]    [ 5743]    '+'
    [ 7555]    [ 7809]    '-'
    [ 9256]    [ 9509]    '-'
    [12878]    [15066]    '-'
    [16478]    [17458]    '-'

和另一个cell数组

C =

[4]
[7]
[1]
[6]
[2]
[5]
[3]

我想将C中的值替换为B{...,3}中的值,以便C成为

C = 

    '-'
    '-'
    '+'
    '-'
    '+'
    '-'
    '+'

我怎样才能在MATLAB中做到这一点?我目前这样做但是出错了

>> C(C == 'x') = B
Undefined function 'eq' for input arguments of type 'cell'.

3 个答案:

答案 0 :(得分:3)

具有[]单元格数组输出({:})的水平串联(comma-separated list)提供了一种直接方法来索引B中的相应行:

Cnew = B([C{:}],3)

答案 1 :(得分:2)

你可以尝试

C = cellfun(@(x)B(x,3),C);

这解决了C不再是单元格数组时遇到的问题 - 请注意B{}B()之间的细微差别。

答案 2 :(得分:1)

基本索引,以X的顺序获取a=[1,3,2,4]的元素使用X(a)。指数是矩阵,因此需要进行转换,而不是其他任何转换。

B(cell2mat(c),3)