【MATLAB】高维矩阵求和 |
您所在的位置:网站首页 › matlab计算累乘求和 › 【MATLAB】高维矩阵求和 |
前言
之前就写过一篇关于高维矩阵求和的,现在再看的话,写得不是很清楚。 高维矩阵的求和 a=ones(2,3,4,5) a(:,:,1,1) = 1 1 1 1 1 1 a(:,:,2,1) = 1 1 1 1 1 1 a(:,:,3,1) = 1 1 1 1 1 1 a(:,:,4,1) = 1 1 1 1 1 1 a(:,:,1,2) = 1 1 1 1 1 1 ......这样是创建了一个4维的矩阵。 sum(a,n)应该这样理解:a是目标矩阵,n是待求和的维度。显然n的取值范围是1 2 3 4。那么在某个维度求和的效果是什么呢?其实就是将这个维度的长度压缩为1。 上面有个表达“维度的长度”,大家注意区分维度和长度。 举例说明 例子1 >> sum(a,1)为方便,直接进入到变量面板查看。 这是原始的a矩阵: 这是ans,也就是sum(a,1)的操作结果: 可以看到2 3 4维度都没有受到影响,只有1维度的长度被压缩到了1,当然这个维度上的数也被加和起来了,即2=1+1。 例子2 >> sum(a,2)ans如下: 结果已经很显然了,维度2的长度被压缩到1,这个维度上的数也被加和起来,即3=1+1+1。 例子3 >> sum(a,3)ans如下: 这个例子需要对比不同求和方式得到的ans才能体会更深刻。维度3的长度从4被压缩到1,所以维度1和2表示的2*3矩阵被叠加了4下,所以是 的形式。 例子4 >> sum(a,4)ans如下: 同理,5=1+1+1+1+1。 小结MATLAB的对于矩阵的展示是这样的:前两个维度是通过平面排布的方式展示出来,更高维度则是通过索引展示出来。 通过平面排布的方式展示出来 意思就是维度1表示多少行,维度2表示多少列,而行列是用一种直观的平面排布,你甚至可以没有“维度”的概念。这也是我们平时最常说的:几行几列的矩阵。 通过索引展示出来 意思就是更高维度没法在一个平面中展示出来,平面中展示的永远是维度1和2的信息,维度3以及更高则通过索引比如下面的(3,4)展示。 所以通过(:,:,3,4)我们可以得到如下信息:维度1 2 之外还有两个维度,整个矩阵是4维的;a(:,:,3,4)是维度3的索引值=3以及维度4的索引值=4对应的矩阵。编程的过程中是会涉及到高维矩阵的,比如下面这个约束: e s , t , j , i v = e s , t − 1 , j , i v + p s , t , j , i v , c h η j , i v , c h − 1 η j , i v , d i s p s , t , j , i v , d i s ∀ s , t , j , i e_{s,t,j,i}^v = e_{s,t - 1,j,i}^v + p_{s,t,j,i}^{v,ch}\eta _{j,i}^{v,ch} - {1 \over {\eta _{j,i}^{v,dis}}}p_{s,t,j,i}^{v,dis}{\rm{ }}\forall s,t,j,i es,t,j,iv=es,t−1,j,iv+ps,t,j,iv,chηj,iv,ch−ηj,iv,dis1ps,t,j,iv,dis∀s,t,j,i 最简单的方法其实是用4层循环,但这样效率低,没有充分利用MATLAB善于进行矩阵计算的特性。但是要把这个约束尽可能地写成矩阵形式(可以和for循环配合使用),理解清楚MATLAB高维矩阵的特性还是很有必要的。 另一些问题 >> a=ones(2,3,4,5); b=sum(a,4);b直接变成3维了。 >> a=ones(2,3,4,5); b=sum(a,3);b从属性上来看还是4维,但实际上第3个维度已经没有意义了。 我们在此基础上继续操作: >> b=sum(b,4);可以看到b直接变成2维了!由此我们可以看出,MATLAB中矩阵降维得从最外层开始降,不然会被“卡住”! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |