
用 B = sum(A,3)
指令就可以,表示在第三维上相加。
把上面指令中的3改为1,表示各列上分别求和,改为2,表示各行上本别求和。
详见如下:
A(:,:,1) =
2 1
1 2
A(:,:,2) =
2 2
3 2
>> B = sum(A,3) %这是你想要的结果
B =
4 3
4 4
>> sum(A,1)
ans(:,:,1) =
3 3
ans(:,:,2) =
5 4
>> sum(A,2)
ans(:,:,1) =
3
3
ans(:,:,2) =
4
5
参见MATLAB 的help:
B = sum(A,dim) sums along the dimension of A specified by scalar dim The dim input is an integer value from 1 to N, where N is the number of dimensions in A Set dim to 1 to compute the sum of each column, 2 to sum rows, etc
求一个矩阵A所有元素的绝对值的和的实现方法为:在matlab命令窗口输入代码: sum(sum(abs(A))),其中用到的两个函数的功能如下:
1、abs(A) 求矩阵A中每个元素的绝对值
2、sum(A) 沿着矩阵A的第一个维度计算元素之和。当A为向量时,得到所有元素之和;当A为二维矩阵时,将沿着列求和,即得到一个行向量。
下面进行一个实例演示:
1、打开matlab软件,在命令窗口输入:A = [ 1 2 3;-1 -2 -3;1 0 -1],显示结果如下图所示:
2、接着,输入代码:sum(sum(abs(A))),根据sum函数的说明,对于二维矩阵,使用两次sum函数才能得到所有元素的和。此时得到结果14,即为上面示例矩阵A的所有元素的绝对值之和,如下图所示:
matlab 编写
%先来计算Ej
sumtemp=zeros[1,m];
wj=zeros[1,m]; Ej=zeros[1,m];
Ejsum=0;
k=1/(logn);
pij=zeros[m,n]; %开辟一个0矩阵 mn的零矩阵;
pij=[p11 p21 p31 pn1
p12 p22 p32
p1m p2mp3m]; %将pij值存入;
for j=1:1:m
for i=1:1:n
sumtemp(1,j)=pij(j,i)log(pij(j,i))+sumtemp(1,j);
end
Ej(1,j)=-ksumtemp(1,j);
end
for j=1:1:m
Ejsum=Ej(1,j)+Ejsum;
end
for j=1:1:m
wj(1,j)=(1-Ej(1,j))/(m-Ejsum);
end
%wj是一个1m的矩阵 存储了j指标的商权值wj。
希望对你有帮助~
楼上的是错误的
sum(x,2)表示矩阵x的横向相加,求每行的和,结果是列向量。
而缺省的sum(x)就是竖向相加,求每列的和,结果是行向量。
A>0的结果是得到一个逻辑矩阵,大小跟原来的A一致,
A中大于零的元素的位置置为1,小于等于零的位置置为0。
所以横向求和以后,就是求A中每行大于零的元素个数。
例如
>> A=randn(5)
A =
-043256 11909 -018671 011393 029441
-16656 11892 072579 10668 -13362
012533 -0037633 -058832 0059281 071432
028768 032729 21832 -0095648 16236
-11465 017464 -01364 -083235 -069178
>> sum(A>0,2)
ans =
3
3
3
4
1
就是说A的第一行大于零的有3个,第二行大于零的有3个,……,最后一行大于零的有1个
可先求列和,然后将列和组成的向量转置,最后再对转置后的向量求列和。例对矩阵A求所有元素的和,可:
sum((sum(A))')。
例:
A
=
16
3
2
13
5
10
11
8
9
6
7
12
4
15
14
1
>>
sum((sum(A))')
ans
=
136
matlab中小数取整的函数大约有四个:floor、ceil、round、fix
例如:若
A
=
[-20,
-19,
-155,
-145,
-11,
10,
11,
145,
155,
19,
20]
floor:朝负无穷方向靠近最近的整数,
floor(A)
ans
=
-2
-2
-2
-2
-2
1
1
1
1
1
2
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)