2013-07-24 2 views
2

У меня есть две матрицы А & B в Matlab, напримерудалить элементы с соответствующими нулями в другой матрице MATLAB

A=[0,0,1,2,3,0,4,2,0] 
B=[2,3,1,2,2,3,4,4,1] 

То, что я хочу сделать, это установить элементы в B к нулю, где они имеют ту же позицию в качестве нулевых элементов в А. Таким образом, в моем примере:

A=[0,0,1,2,3,0,4,2,0] 
B=[2,3,1,2,2,3,4,4,1] 

Я хочу B быть таким:

B=[0,0,1,2,2,0,4,4,0] 

Любая идея?

ответ

5

Вы можете сделать это с помощью logical indexing так: B(A==0) = 0

EDIT:

Вы также можете сделать это следующим образом: B.*(A~=0), который будет легче обобщить на более высокие размеры с помощью bsxfun согласно вашему комментарию ниже.

+0

спасибо Дэн! он работает, у меня есть другой вопрос: если B - многомерная матрица, так что A равно 3x3 и B (3x3) x3, как сделать то же самое для каждой матрицы 3x3 в B? Я знаю, что это может быть тривиально, но я просто новичок в этом. Многие thanks – Tak

+1

'bsxfun (@times, A ~ = 0, B)' – Dan

+0

проблема в том, что A является uint16 и B является uint8, поэтому он дает ошибку, как преодолеть это? – Tak

1

Единственная проблема с выполнением чего-то, что предлагает Дэн, - это если A и B не того же размера. Тем не менее, вы можете сделать это с небольшой дополнительной работой.

indices = find(A==0); 
indices = indices(indices <= length(B)); 
B(indices) = 0; 
Смежные вопросы