matlab数组求和问题

matlab数组求和问题,第1张

A只有一行吗?如果不是,我想,可以先整形一下:
A=[
0 0 0 0 0
0 0 0 0 0
2 5 0 0 0
0 0 2 5 0
0 0 0 0 2 ];
a=reshape(A,1,[]);
C=1:max(a);
B=histc(a,C)
结果
B =
0 3 0 0 2
还有,你说直方图大家都会明白你的意思的O(∩_∩)O~

楼上的是错误的
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个

元胞数组
元胞数组是MATLAB的一种特殊的数据类型,可以将其看做一种无所不包的广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
元胞数组的相加
>> a={'matlab',20;ones(2,3),1:10} %创建方法一
a =
'matlab' [ 20]
[2x3 double] [1x10 double]
>> b=[{'matlab'},{20};{ones(2,3)},{1:10}] %创建方法二
b =
'matlab' [ 20]
[2x3 double] [1x10 double]
>> c={10} %赋值方法一
c =
[10]
>> c(1,2)={2} %赋值方法二
c=
[10] [2]
>> c(2,2)={5}
c =
[10] [2]
[] [5]
>> isequal(a,b) %判断是否相同
ans =
1
>> whos
Name Size Bytes Class Attributes
a 2x2 388 cell
ans 1x1 1 logical
b 2x2 388 cell
c 2x2 208 cell
用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。
>> a=cell(1)
a =
{[]}
>> b=cell(1,2)
b =
[] []
>> c=cell(3,3)
c =
[] [] []
[] [] []
[] [] []
>> d=cell(2,2,2)
d(:,:,1) =
[] []
[] []
d(:,:,2) =
[] []
[] []
>> whos
Name Size Bytes Class Attributes
a 1x1 4 cell
ans 1x1 1 logical
b 1x2 8 cell
c 3x3 36 cell
d 2x2x2 32 cell

a=cell(2,3);
mbest=cell(1,2);
for i=1:2
for j=1:2
a{i,j}=rand(1,2);
end
a{i,end}=sqrt((a{i,1}(1)-a{i,2}(1))^2+(a{i,1}(2)-a{i,2}(2))^2);
end
mbest= sum(a{:,1:2},2)/2


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13042057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存