2015-02-27 2 views
2

я не знаю, если это возможно, но я могу дать ему попробовать: если у меня есть массивпреобразовать определенное число до нуля в MATLAB

A=[ 10 10 5 
    2 6 1 
    3 7 2 
    6 10 5 
    4 8 6 
    7 1 7 
    8 12 8] 

который является 7x3 размером

и другой массив

B= [4 6 7] 

который имеет размер 1x3, так как вы можете видеть, что количество столбцов одинаково.

так это то, что я хочу сделать,

в колонке 1 массив А, я хочу, чтобы преобразовать значения меньше, чем число в столбце 1 массив B или 4 к нулю, тогда как в колонке 2 массива А, я хочу, чтобы преобразовать эти значения меньше, чем число в колонке 2 массива B в нуле, я тусклый, чтобы сделать это в колонке 3 массива A.

, то выход становится:

AB=[ 10 10 5 
    0 6 0 
    0 7 0 
    6 10 0 
    4 8 0 
    7 0 7 
    8 12 8] 

идея если вы имеют массив mxn и еще один массив 1xn, он автоматически преобразует эти значения в ноль который зависит от значений в вашем массиве 1xn.

это возможно? Благодарю.

ответ

7

bsxfun(@gt,A,B).*A должен это сделать.

Мой результат:

10 10  0 
0  0  0 
0  7  0 
6 10  0 
0  8  0 
7  0  0 
8 12  8 

Объяснение:

Функция MATLAB bsxfun позволяет выполнять операции поэлементно на массивах с одноточечного расширения (из-за этого он одна из самых полезных функций языка).

Первый аргумент - операция, которую вы хотите выполнить. @gt является оператором «больше, чем» >. Вы также можете использовать @plus для добавления +, @times для умножения * и т. Д. (Проверьте документацию для полного списка).

Если массивы A и B равны по размеру, операция выполняется по элементам. Если они различны (как в приведенном выше случае), всякий раз, когда один массив имеет одноэлементный размер (размер размером 1), bsxfun реплицирует массив вдоль этого измерения.

Таким образом, массив B = [4 6 7] превращается в

[ 4 6 7 
    4 6 7 
    4 6 7 
    4 6 7 
    4 6 7 
    4 6 7 
    4 6 7 ] 

Чтобы соответствовать размерам A. Затем bsxfun просто применяет операцию «>».

+0

можете ли вы ответить на него с особой тщательностью? или предоставить примерную базу по моей проблеме? спасибо – Raldenors

+0

Ох это работает спасибо :) – Raldenors

+0

@Raldenors Я отредактировал свой ответ, чтобы дать объяснение 'bsxfun'. – eigenchris

Смежные вопросы