我有矩阵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)
吗?
答案 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.