我对某个程序有一个问题,我希望得到一些帮助。
我的主要目标是在两个数组中使用所有可能的对。有了一些帮助,我设法得到了这个
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
等等..但是当我尝试这种方法时,并不是所有的组合都被使用。如何获得所有可能的组合?
答案 0 :(得分:1)
Matlab具有meshgrid功能,可以为此目的消除循环,例如
>> r1=(x1+x2).^2-x1.*x2;
或使用正方形
>> a1=[0:15];a2=[0:15];
>> [x1,x2]=meshgrid(a1,a2);
>> r=-x1.*x2+(x1+x2).^2;
>> size(r)
ans =
16 16
更新:对于你的情况你使用0:15的值,使用它们将导致
>> 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
UPDATE 2 请注意,您的方法不会创建所有对,例如(0,0)或(1,1)也不会只有其中一个(x, y)(y,x)对将是x!= y值。除了双循环之外,首选方法就是我提出的方法。您也可以轻松地以您想要的形式收集结果
android:src="img"