且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何检查是否在一个阵列的任何变量是在另一个

更新时间:2023-11-29 11:05:46

例如向量:

 >> M = [1 3 5 9]。
N = [5 2 1 4 8]。


  1. 要检查是否向量 M 的每个元素是 N ,使用的 ismember

     >> ismember(M,N)
    ANS =
         1 0 1 0


  2. 要获取值,而不是指数:上使用逻辑索引 M

     >>米(ismember(M,N))
    ANS =
         1 5

    ,或直接使用 相交

     >>相交(M,N)
    ANS =
         1 5


I'm developing a program with MatLab that calculates powers of numbers, adds them together, and then sees if any of the first set of numbers (numbers to powers) equals any of the added numbers to powers. I'm trying to check this for each value in the first array, however, I am getting an output like this:

m =
       1
     128
    2187
   16384
   78125
  279936
  823543
 2097152
 4782969
10000000

for each m value, which is just the result of a simple for loop of the array. So when I go to check if m is in the array, it checks is [1, 128,2187,16384,78125...] in the array, and the answer is no. How can I get it to evaluate each individual entry, like this:

Array n is [1,128,2187,16384]
for m = n
m = 1
Is m in array? No
m = 128
Is m in array? No
m = 2187
Is m in array? Yes
m = 16384
Is m in array? No
end

My code is below:

C = [];
D = [];
E = [];
F = [];
numbers1 = [];
numbers2 = [];

numbers = 10;
powers = 10;

for i = 1:numbers 
    for j = 3:powers  
        C = [C;i^j]; 
    end  
    C = transpose(C);
    D = [D;C];  
    C = [];
end

[~,b] = unique(D(:,1)); % indices to unique values in first column of D
D(b,:);                  % values at these rows

for i = D
    for a = D
        E = [E;i+a];
    end
    E = transpose(E);
    F = [F;E];  
    E = [];
end

[~,b] = unique(F(:,1)); % indices to unique values in first column of F
F(b,:);                  % values at these rows

for m = D % this is the for loop mentioned above
        m
end

Example vectors:

>> m = [1 3 5 9];
n = [5 2 1 4 8];

  1. To check if each element of vector m is in n, use ismember:

    >>ismember(m,n)
    ans =
         1     0     1     0
    

  2. To get the values, not the indices: use logical indexing on m:

    >> m(ismember(m,n))
    ans =
         1     5
    

    or directly use intersect:

    >> intersect(m,n)
    ans = 
         1     5