【问题标题】:Combination of arrays in MatlabMatlab中的数组组合
【发布时间】:2016-05-17 17:10:35
【问题描述】:

我在某个程序的某个部分遇到问题,希望能得到一些帮助。

我的主要目标是在两个数组中使用所有可能的对。在一些帮助下,我设法得到了这个

A = nchoosek(0:15, 2)
arr1 = A(:,1);
arr2 = A(:,2);
Result = arr1.*arr2 + arr1.^2 + arr2.^2;

我想使用 arr1 和 arr2 中的所有组合来求解结果方程并打印出这样的结果:

arr1   arr2    Result
0       0        0
1       1        3
2       0        4

等等..但当我尝试这种方法时,并不是所有的组合都被使用。我应该怎么做才能获得所有可能的组合?

【问题讨论】:

    标签: matlab combinations permutation


    【解决方案1】:

    Matlab 有meshgrid 功能,可以为此目的消除循环,例如

    >> a1=[1:4];
    >> a2=[0:3];
    >> [x1,x2]=meshgrid(a1,a2);
    >> r=x1.*x2+x1.^2+x2.^2;
    

    或者使用一次正方形

    >> r1=(x1+x2).^2-x1.*x2;
    

    更新:对于您的情况,您使用 0:15 值,使用它们将导致

    >> a1=[0:15];a2=[0:15];
    >> [x1,x2]=meshgrid(a1,a2);
    >> r=-x1.*x2+(x1+x2).^2;
    >> size(r)
    
    ans =
    
        16    16
    

    更新 2 请注意,您的方法不会创建所有对,例如 (0,0) 或 (1,1) 也不会只存在 (x, y) (y,x) 对将用于 x!=y 值。除了双循环之外,我建议的首选方法是。您也可以轻松地将结果以您想要的形式收集到矩阵中

    >> n=size(r,1);
    >> R=[reshape(x1,1,n*n); reshape(x2,1,n*n); reshape(r,1,n*n)]'
    R =
         0     0     0
         0     1     1
         0     2     4
         0     3     9
         0     4    16
         0     5    25
         0     6    36
         0     7    49
         ...
        15     6   351
        15     7   379
        15     8   409
        15     9   441
        15    10   475
        15    11   511
        15    12   549
        15    13   589
        15    14   631
        15    15   675
    

    【讨论】:

    • 感谢您的回复,但这似乎没有按我想要的方式工作。它给出了一个输出“1x4 double”
    • 你的输入向量是什么?您是否尝试过我发布的示例。它应该为您提供 4x4 矩阵,即大小为 4 的两个输入的叉积。
    • 我试过你给我的例子,但仍然返回 "1x4 double" 。我的输入向量是 arr1 = A(:,1) 和 arr2 = A(:,2) (我发布的代码)
    • 请复制/粘贴代码,应该是 16x16,如图所示。不能是一维的。
    • 正如我在帖子中所说,这些值应该放在一个表格中,并为每个组合提供输出 R。例如 x1=5 | x2= 1 | R = 31 , x1 = 0 | x2 = 3 | R= 9 等等。
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多