我有一个1000x1000矩阵A(包含从0到150的值)和一个181x1向量B.在我的矩阵A中,我只想保留B中存在的那些值,同时保持A具有相同的大小。 我试着用功能ismember,但它并没有给我我期望的结果。所以,我想的其他功能 这是我做的代码如何解决与函数相交的矩阵维度错误?
A=A.*intersect(A,B,'stable');
但我有这个错误
Error using .*
Matrix dimensions must agree.
我该怎么办解决这个问题?
我有一个1000x1000矩阵A(包含从0到150的值)和一个181x1向量B.在我的矩阵A中,我只想保留B中存在的那些值,同时保持A具有相同的大小。 我试着用功能ismember,但它并没有给我我期望的结果。所以,我想的其他功能 这是我做的代码如何解决与函数相交的矩阵维度错误?
A=A.*intersect(A,B,'stable');
但我有这个错误
Error using .*
Matrix dimensions must agree.
我该怎么办解决这个问题?
所有你需要的是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
显示的代码照顾了这一点,正如评论中已经解释的那样。
接受这个问题:) –
用随机数创建两个矩阵,A
和B
。 C
是一个数组,其值为A
和B
,使用ismember
我们可以选择A
中保留的值。
A = randi([0 150], 1000, 1000);
B = randi([0 150], 181, 1);
C = intersect(A, B, 'stable');
A(~ismember(A, C)) = 0;
A中元素的值不是B变成了什么?零可以吗? –
是的,现在我离开他们变成零的事实 –