2017-02-09 21 views
0

У меня есть массив ячеек:Как заменить элемент из массива ячеек?

A = {NaN, ‘k’, ‘m’, ‘n’} 

Я хочу, чтобы заменить все, кроме 3-го элемента А с NaNs получить

B = {NaN, NaN, ‘m’, NaN} 

Пожалуйста, любая помощь/предложения о том, как я мог бы идти об этом ? Кроме того, возможно ли это сделать с помощью одной строки кода?

+0

Умеешь ли ты быть более конкретным? Как вообще должно быть решение? У вас есть массив целых чисел, который содержит индексы элементов, которые должны быть заменены на NaN или как вы знаете, какие элементы следует заменить? – julian59189

+0

Почему вы используете двойные NaN в сочетании с символами? странная комбинация для меня – JHBonarius

+0

Хороший вопрос @ julian59189. На самом деле я не мог придумать лучшего способа сформулировать проблему, поскольку основной код немного громоздкий и может немного помучиться, поэтому я решил задать вопрос простым и надеюсь, что я получу ответ, который мог бы адаптировать , Для последней части вашего вопроса несколько утверждений «IF» должны решить, какой конкретный элемент будет заменен. Не волнуйтесь, второе решение Suever идеально подходит для меня. Благодаря! – User110

ответ

1

Вы можете создать новый массив всех Нэн, а затем заменить третий элемент со значением из исходного массива клеток

B = num2cell(nan(size(A)); 
B(3) = A(3); 

Альтернативно, вы можете перезаписать другие значения с:

B = A; 
B([1 2 4]) = {NaN}; 

Что касается одной строки кода, то количество строк не имеет значения. Важное значение имеет читаемость и производительность. Эти две вещи не обязательно коррелируют с количеством строк.

+0

'сделка' не требуется. Я думаю, что «B ([1: 2 4: конец]) = {NaN}' лучше. Нет? –

+1

@Sardar_Usama Ах да. Если вы полагаетесь на значения, разделенные запятыми слева, это необходимо, но назначение '()' является лучшим вариантом. Спасибо – Suever

+0

Большое спасибо @Suever. Работает отлично (второй код мне больше подходит). На самом деле у меня есть массив ячеек как матрица p x 4, и в этом случае я должен выполнить определенную задачу, перейдя по массиву по ряду строк. Следовательно, мне пришлось добавить количество строк в ваш код как: '[B {p, [1 2 4]}] = deal (NaN);' и я был удивлен, что он все еще работает. – User110