在MATLAB中使用给定矩阵生成矩阵

时间:2017-02-06 03:07:45

标签: matlab matrix

我有矩阵A尺寸M x N,其中一般元素是a_{i,j}。我想要矩阵B大小M x N,其中一般元素b_{i,j}生成,a_{i,j}除以同一列的其他元素的总和(j - 列) 。

例如,如果A尺寸为3 x 2,则为b_{2,1}=a_{2,1}/(a_{1,1}+a_{1,3})

有人可以帮助我在Matlab中写这个A=randn(M,N)吗?

2 个答案:

答案 0 :(得分:1)

一种简单的方法是生成除数矩阵,然后进行元素除法。除数的元素可以通过预乘a乘以布尔取反的单位矩阵来求和,其行数和列数与a中的行数相同。左乘法更容易,因为你想按列而不是通常的行求和。

c = ~eye(size(a, 1)) * a
b = a ./ c

答案 1 :(得分:1)

如果您有MATLAB R2016b / Octave,您可以这样做:

b = a ./ (sum(a) - a);

否则您可以使用bsxfun

b = a ./ bsxfun(@minus, sum(a), a);

我(在Octave中)应用了我的答案以及@MadPhysicist提出的解决方案的时间

a=rand(3000,2000);

disp('-------USING EYE----')
tic
x = size(a) ;
c = ~eye(x(1)) * a;
 a ./ c;
toc


disp('-------USING BSXFUN-')
tic
a ./ (sum(a) - a);
toc

结果如下:

-------USING EYE----
Elapsed time is 0.454791 seconds.
-------USING BSXFUN-
Elapsed time is 0.0998709 seconds.