1

我有一个关于评分系统的小项目要做。我发现如果我使用 excel 来操作它,它肯定会占用我很多时间。我希望我能得到你们的帮助。

A = [10 20 30 40 ...]       % (1xm array)
B = [0.02; 0.04;...]        % (nx1 array)
F = A/B                     % F should be (n x m matrix)
Z = zero (size(nxm), 3)     % I'm trying to create a matrix with n x m row and 3 column)

我想将 F 分类为 Z(1:end),Z(1:end) 相应的 A 将在 Z(2:end) 中,相应的 B 将在 Z(3:end) 中。我可以知道我应该如何用matlab写吗?

例子:

       10      20    30    40    50 ...
0.02  500     1000  1500  2000   2500
0.04  250     500   750   1000   1250
0.06 166.67 333.33  500  666.67  833.33 
...

输出 Z

166.67  10  0.06
250     10  0.04
333.33  20  0.06
....

希望这里的任何人都可以帮助我。谢谢。

4

2 回答 2

1

您正在寻找的东西是meshgrid, 或bsxfun。网格解决方案:

A=[10 20 30 40];
B=[0.02 0.04 0.06 0.08];
[x,y]=meshgrid(A,B); % Generate 2 matrices having the elements to divide
F=x./y;              % Do elemnt-by-element divide
Z=[F(:),x(:),y(:)];  % put all values from the matrices together as columns,
                     % using linear indexing (:).

bsxfun 解决方案更紧凑、更快,但可读性更差:

F=bsxfun(@rdivide,A',B); % Put the transpose at B if you want it 
                       % sorted along B.
x=bsxfun(@times,A,ones(size(B,2),1));  % a matric containing A as columns
y=bsxfun(@times,ones(1,size(A,2)),B'); % a matrix containing B repeated as rows
Z=[F(:),x(:),y(:)];

bsxfun 的诀窍在于它进行单例扩展。输入沿长度为 1 的每个维度重复,与匹配第二个操作数所需的一样多。

所以在上面的 4x4 案例中,你有(伪代码):

[10 20 30 40] .* [0.01;
                  0.02;
                  0.04;
                  0.06]

将扩展为(也是伪代码):

[10 20 30 40;    [0.01 0.01 0.01 0.01;
 10 20 30 40; .*  0.02 0.02 0.02 0.02;
 10 20 30 40;     0.04 0.04 0.04 0.04;
 10 20 30 40]     0.06 0.06 0.06 0.06]

您似乎希望按 F 对其进行排序:您可以使用以下方法轻松完成此操作

Z_sort = sortrows(Z,[1]);
于 2012-06-15T10:11:34.350 回答
1

这是使用reshape线性寻址的解决方案:

输入数据(A是行向量,B是列向量):

A = [ 10, 20, 30, 40 ];
B = [ 0.02; 0.04; 0.06; 0.08 ];

这是代码:

F = bsxfun(@rdivide, A, B);
Fvector = reshape(F, 1, numel(F));

[SortedFvector, IX] = sort(Fvector);
Aindices = ceil(IX/size(B, 1));

Bindices = mod(IX, size(B, 1));
Bindices(Bindices == 0) = size(B, 1);

Z = [ SortedFvector', A(Aindices)', B(Bindices) ];
于 2012-06-15T11:23:59.950 回答