2017-03-01 29 views
0

我有一个1000x1000矩阵A(包含从0到150的值)和一个181x1向量B.在我的矩阵A中,我只想保留B中存在的那些值,同时保持A具有相同的大小。 我试着用功能ismember,但它并没有给我我期望的结果。所以,我想的其他功能 这是我做的代码如何解决与函数相交的矩阵维度错误?

A=A.*intersect(A,B,'stable'); 

但我有这个错误

Error using .* 
Matrix dimensions must agree. 

我该怎么办解决这个问题?

+0

A中元素的值不是B变成了什么?零可以吗? –

+0

是的,现在我离开他们变成零的事实 –

回答

2

所有你需要的是ismember此任务如下:

A = A.*ismember(A,B); 
% ismember(A,B) gives the logical matrix containing 1's for the indexes whose values 
% are present in `B` and 0's for all other indexes. When this logical matrix is 
% element-wise multiplied with A, all the indexes of A whose elements are not in B 
% become zero 

为什么你的代码不能正常工作?

这是因为与intersect(A, B, 'stable'),你得到的含(最有可能)小于或等于A元素数量的列向量(非常少的可能)。即使相等,当您将其乘以A时,也会得到相同的错误,因为A不是列向量。单元乘法要求两个矩阵的阶数相同,因为只有当矩阵的每个元素可以与另一个矩阵中的相应元素相乘时。

上面用ismember显示的代码照顾了这一点,正如评论中已经解释的那样。

+1

接受这个问题:) –

1

用随机数创建两个矩阵,ABC是一个数组,其值为AB,使用ismember我们可以选择A中保留的值。

A = randi([0 150], 1000, 1000); 
B = randi([0 150], 181, 1); 
C = intersect(A, B, 'stable'); 
A(~ismember(A, C)) = 0;