найти и заменить значения в массиве ячеек

У меня есть такой массив ячеек: [...

0
129
8...2...3...4
6...4
0

Я просто хочу найти и заменить определенные значения, но я не могу использовать обычную функцию, потому что ячейки имеют разную длину. Мне нужно заменить много конкретных значений одновременно, и нет общей функции о том, как заменяются значения. Однако иногда несколько входных значений необходимо заменить одним и тем же выходным.

поэтому я хочу сказать
для значений 1:129
'если 0, то 9'
'иначе, если 1, то 50'
'иначе, если 2 или 3 или 4, то 61' и т. д... вверх до 129

где эти правила применяются ко всему массиву.

Я пытался решить это сам, но все равно ничего не получалось. Пожалуйста помоги!


person Tom    schedule 29.03.2011    source источник


Ответы (1)


Поскольку ваши значения охватывают диапазон от 0 до 129, одним из решений является добавление одного к этим значениям (чтобы они охватывают диапазон от 1 до 130) и использование их в качестве индексов в векторе значений замены. Затем вы можете применить эту операцию к каждой ячейке, используя функцию CELLFUN. Например:

>> C = {0, 129, [8 2 3 4], [6 4], 0};  %# The sample cell array you give above
>> replacement = [9 50 61 61 61 100.*ones(1,125)];  %# A 1-by-130 array of
                                                    %# replacement values (I
                                                    %# added 125 dummy values)
>> C = cellfun(@(v) {replacement(v+1)},C);  %# Perform the replacement
>> C{:}  %# Display the contents of C
ans =
     9

ans =
   100

ans =
   100    61    61    61

ans =
   100    61

ans =
     9
person gnovice    schedule 29.03.2011