matlab累加求和函数怎么输入(matlab累加求和for循环)

TRAVEL

matlab累加求和函数怎么输入(matlab累加求和for循环)内容在对数据处理时,经常会遇到要对满足特定要求下对应的数据进行一些计算。如果数据量少的话,excel可以很好的进行操作。但是如果数量级比较大,则可以用MATLAB进行操作。最近刚好遇到班里同学的数据处理需要对数据操作,以这个实例介绍相关的知识。实例内容:数据为2000年的一个进出口贸易的汇总表,一共有一百多万数据,需要把每个进口商对应的贸易价值和求出来,也就是按照进口商的编号,计算这个编号的所有贸易流量价值和。比如第3列第一个是12,就把第4列12对应的求和。

具体的执行方式设想:设想1:利用循环加条件语句,1个循环加上对应的条件。缺点是进口商比较多有200多个,操作会繁琐,程序过长。设想2:统计进口商的个数和对应的编号,利用两个循环加一个条件语句进行判断,这样的前提是需要筛选统计出进口商的个数和每个对应的编号。外层循环控制进口商的编号索引,内层循环计算判断每行的第3列与当前进口商编号是否相同,相同的话就进行累加。缺点是循环执行多次,运行时间较长。设想3:统计进口商的个数和对应的编号,利用1个循环加一个条件语句进行判断,利用find函数对满足条件的数据记录对于的索引值,进行批量操作。优点:循环执行次数少,为单层循环,并且充分利用了MATLAB的数据处理的优势。

1.实例计算

clc;clear all;data = xlsread(‘BACI_HS96_Y2000_V202201.csv’);%换成对应的文件名% load dataA = data(:,3)’;%提取数据B = unique(A); %利用unique函数删除重复的元素,获得进口商的个数和对应的编号C = B’;%转置[m,n] = size(data);%计算数据长度k = length(C);%计算进口商的个数s1 = [];%记录矩阵初始化for i = 1:k s = 0;%累加求和结果初始化 index = find(data(:,3)==C(i));%利用find函数寻找满足条件的数对应的下标,并对数据进行求和 s = sum(data(index,4)); s1 = [s1;s];%记录数据endxlswrite(‘结果.xlsx’,[C s1]);%第1列 国家编号 第2列 贸易价值和

1、unique函数

数组中的唯一值

语法

C=unique(A)

C=unique(A,setOrder)

C=unique(A,occurrence)

C=unique(A,___,’rows’)

C=unique(A,’rows’,___)

[C,ia,ic]=unique(___)

[C,ia,ic]=unique(A,’legacy’)

[C,ia,ic]=unique(A,’rows’,’legacy’)

[C,ia,ic]=unique(A,occurrence,’legacy’)

[C,ia,ic]=unique(A,’rows’,occurrence,’legacy’)

说明

C=unique(A) 返回与 A 中相同的数据,但是不包含重复项。C 已排序。

如果 A 是表或时间表,则 unique 按排序顺序返回 A 中的唯一行。对于时间表,当确定行是否唯一时,unique 会考虑行时间和行值,并按行时间对输出时间表 C 排序。

C=unique(A,setOrder) 以特定顺序返回 A 的唯一值。setOrder 可以是 ‘sorted’(默认值)或 ‘stable’。

C=unique(A,occurrence) 指定遇到重复值时应返回哪个索引。occurrence 可以是 ‘first’(默认值)或 ‘last’。

C=unique(A,___,’rows’) 和 C = unique(A,’rows’,___) 将 A 中的每一行视为单个实体,并按排序顺序返回 A 中的唯一行。必须指定 A,而 setOrder 和 occurrence 是可选的。

‘rows’ 选项不支持元胞数组。

[C,ia,ic]=unique(___) 还可使用上述任何语法返回索引向量 ia 和 ic。

如果 A 是向量,则 C=A(ia) 且 A=C(ic)。

如果 A 是矩阵或数组,则 C=A(ia) 且 A(:)=C(ic)。

如果指定了 ‘rows’ 选项,则 C=A(ia,:) 且 A=C(ic,:)。

如果 A 是表或时间表,则 C=A(ia,:) 且 A=C(ic,:)。

[C,ia,ic]=unique(A,’legacy’)、[C,ia,ic]=unique(A,’rows’,’legacy’)、[C,ia,ic]=unique(A,occurrence,’legacy’) 和 [C,ia,ic]=unique(A,’rows’,occurrence,’legacy’) 保留 R2012b 和早期版本中 unique 函数的行为。

‘legacy’ 选项不支持分类数组、日期时间数组、持续时间数组、日历持续时间数组、表或时间表。

2、find函数

查找非零元素的索引和值

语法

k=find(X)

k=find(X,n)

k=find(X,n,direction)

[row,col]=find(___)

[row,col,v]=find(___)

说明

k=find(X) 返回一个包含数组 X 中每个非零元素的线性索引的向量。

如果 X 为向量,则 find 返回方向与 X 相同的向量。

如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量。

如果 X 包含非零元素或为空,则 find 返回一个空数组。

k=find(X,n) 返回与 X 中的非零元素对应的前 n 个索引。

k=find(X,n,direction)(其中 direction 为 ‘last’)查找与 X 中的非零元素对应的最后 n 个索引。direction 的默认值为 ‘first’,即查找与非零元素对应的前 n 个索引。

[row,col]=find(___) 使用前面语法中的任何输入参数返回数组 X 中每个非零元素的行和列下标。

[row,col,v]=find(___) 还返回包含 X 的非零元素的向量 v。

3.函数使用举例

(1)向量中的唯一值

定义包含一个重复值的向量。

A = [9 2 9 5];

计算 A 的唯一值。

C = unique(A)C=1×3 2 5 9

(2)唯一值及其索引

定义包含一个重复值的向量。

A = [9 2 9 5];

计算 A 的唯一值以及索引向量 ia 和 ic,这样 C = A(ia) 和 A = C(ic)。

[C, ia, ic] = unique(A)C = 1×3 2 5 9ia = 3×1 2 4 1ic = 4×1 3 1 3 2

(3)唯一元素的计数

查找向量中的唯一元素,然后使用 accumarray 计算每个唯一元素出现的次数。

创建一个由 1 到 5 的随机整数组成的向量。

a = randi([1 5],200,1);

查找向量中的唯一元素。返回索引向量 ia 和 ic。

[C,ia,ic] = unique(a);

计算 C 中的每个元素在 a 中出现的次数。将 ic 指定为 accumarray 的第一个输入,将 1 指定为第二个输入,以便函数计算 ic 中的重复下标。汇总结果。

a_counts = accumarray(ic,1);value_counts = [C, a_counts]value_counts = 5×2 1 46 2 36 3 38 4 39 5 41

(4)向量中按指定顺序排序的唯一值

使用 setOrder 参数指定 C 中值的排序方式。

如果您想要 C 中的值与 A 中的值顺序相同,请指定 ‘stable’。

A = [9 2 9 5];[C, ia, ic] = unique(A,’stable’)C = 1×3 9 2 5ia = 3×1 1 2 4ic = 4×1 1 2 1 3

此外,还可以指定 ‘sorted’ 顺序。

[C, ia, ic] = unique(A,’sorted’)C = 1×3 2 5 9ia = 3×1 2 4 1ic = 4×1 3 1 3 2

(5)含有 NaN 的数组中的唯一值

定义一个包含 NaN 的向量。

A = [5 5 NaN NaN];

计算 A 的唯一值。

C = unique(A)

C = 1×3

5 NaN NaN

unique 将 NaN 值视为不同的值。

与门派共成长!书山有路勤为径学海无涯苦作舟

发表评论

登录后才能评论