快速获取数列/矩阵中前项元素累积和
来源:互联网 发布:剑三同人知乎 编辑:程序博客网 时间:2024/05/19 06:47
如果我们有数列
最简单直接的实现方法是使用
a = [ 1 2 3 4 5];b = zeros(1,length(a));b(1) = a(1);for i = 2:length(a) b(i) = b(i-1) + a(i);end%b = [1 3 6 10 15]
更好的方式是使用矩阵来进行计算,如果我们有如下三角矩阵:
那么,下述矩阵乘法即可立即得到结果。
a = [ 1 2 3 4 5];mxl = size(a,2); %得到行向量的数目triMx = triu(ones(mxl,mxl),0); %构造上三角矩阵b = a*triMx;%b = [1 3 6 10 15]
事实上,我们可以讲
a = [ 1 2 3 4 5; 2 3 4 5 6];mxl = size(a,2); %得到行向量的数目triMx = triu(ones(mxl,mxl),0); %构造上三角矩阵b = a*triMx; %注意三角矩阵的位置%b = 1 3 6 10 15% 2 5 9 14 20
不难发现,如果我们需要对矩阵的列方向进行相同的任意前向元素求和,可以继续使用下三角矩阵:
b = [1 3 6 10 15 2 5 9 14 20]mxl = size(b,1); %得到列向量的数目triMx = tril(ones(mxl,mxl),0); %构造下三角矩阵c = triMx*b %注意三角矩阵的位置%c =% 1 3 6 10 15% 3 8 15 24 35
更进一步的,如果我们需要得到一幅图像的积分图,我们可以先求得列向量的累积和,然后对计算结果再求行向量的累积和:
b = [1 3 6 10 15 2 5 9 14 20]mxl = size(b,1); %得到列向量的数目triMx = tril(ones(mxl,mxl),0); %构造下三角矩阵c = triMx*bmxl = size(c,2); %得到行向量的数目triMx = triu(ones(mxl,mxl),0); %构造上三角矩阵d = c*triMx %使用matlab内建的函数cumsum,首先对列,然后对行进行累积和计算,得到的结果是一致的t = cumsum(cumsum(b,1),2)
事实上,Matlab内建了用于计算积分图像的函数integralImage
0 0
- 快速获取数列/矩阵中前项元素累积和
- 矩阵快速幂求斐波拉切数列
- 矩阵快速幂+斐波纳契数列的立方和
- Opencv中获取矩阵的元素值
- 矩阵累积和的最大路径
- 快速Fibonacci数列,矩阵法
- fibonacci数列矩阵快速幂
- CV_MAT_ELEM——获取矩阵元素和初始化矩阵
- 求矩阵中最大二维矩阵(元素和最大)
- 求矩阵中元素和最大的二维子矩阵
- 一个矩阵中最大的二维矩阵(元素和最大)
- duilib获取combo当前项tag简化
- 矩阵快速幂 求Fibonacci数列poj3070
- 利用矩阵快速幂求斐波那契数列
- 矩阵快速幂求斐波那契数列 poj3070
- 矩阵快速幂斐波那契数列
- Codevs_P1250 Fibonacci数列(矩阵快速幂)
- Codevs_P1732 Fibonacci数列 2(矩阵快速幂)
- WIN7环境安装kali双系统
- 程序员如何找对象(1)
- C# 沙漏源码
- JAVA图形用户界面编程及事件处理
- 大整数乘法
- 快速获取数列/矩阵中前项元素累积和
- React-Native环境配置之安装Node.js
- 尝试做事情30天-架构即未来
- 专业化基础—— JAVA基本了解
- 数据库
- Codeforces Round #346 (Div. 2) F. Polycarp and Hay (并查集+bfs)★
- Codeforces 363B Fence-暴力
- 暑期社会实践心得
- 算法之最长公共子序列(LCS)算法