Matlab:将数组与其他数组进行比较

时间:2012-10-04 01:47:27

标签: arrays matlab if-statement median

  

可能重复:
  Matlab, comparing array using if statement

嘿伙计们,我有一个类似下面的数组

A = [2 4 6 8 ; 3 5 7 9 ; 1 4 6 9]

row_median = [ 5 6 5 ]
col_median = [ 2 4 6 9 ]

从这个数据中我想创建另一个名为MedianMap的数组。我需要使用IF语句(我知道有更简单的方法,如meshgrid,但我想知道如何这样做)将数组A中的所有值与相应的行进行比较在以下条件下的列中位数:

  • 如果该值大于行和列中值,则将“1”分配给中值映射
  • 如果该值小于行和列中值,则将“-1”分配给中值映射
  • 否则为0

2 个答案:

答案 0 :(得分:2)

您似乎是一个相当新的用户,所以欢迎来到SO。两件事:1)如果您认为我或其他人已回答您的问题,请点击答案旁边的勾号。至于第二,好吧......

2)这听起来像是一个家庭作业问题(即使你知道有更好的方法,你想使用IF语句的事实)。如果是这种情况,请注意以后参考,如果您在问题中证明您至少试图自己解决问题,那么人们更有可能提供帮助。

如果这不是一个家庭作业问题,这里有两个解决方案(一个是IF语句,另一个没有):

%#Setup
A = [2 4 6 8 ; 3 5 7 9 ; 1 4 6 9];
Med1 = median(A, 1); %median of each column
Med2 = median(A, 2); %median of each row
T = size(A, 1);
N = size(A, 2);

%#Your IF solution
MedianMap2 = NaN(T, N);
for t = 1:1:size(A, 1)
    for n = 1:1:size(A, 2)
        if A(t, n) > Med1(1, n) && A(t, n) > Med2(t, 1)
            MedianMap2(t, n) = 1;
        elseif A(t, n) < Med1(1, n) && A(t, n) < Med2(t, 1)
            MedianMap2(t, n) = -1;
        else
            MedianMap2(t, n) = 0;
        end
    end
end

%#A better solution
I1 = (A > ones(T, 1) * Med1) .* (A > Med2 * ones(1, N));
I2 = (A < ones(T, 1) * Med1) .* (A < Med2 * ones(1, N));
MedianMap1 = zeros(T, N) + I1 - I2;

%#Print output
MedianMap1

答案 1 :(得分:2)

这也是bsxfun的工作:

 result = zeros(size(A));
 result( bsxfun(@gt,A,row_median') & bsxfun(@gt,A,col_median) ) =  1;
 result( bsxfun(@lt,A,row_median') & bsxfun(@lt,A,col_median) ) = -1;