矩阵的和减去一维

6次浏览(最近30天)
拉斐尔施瓦辛格
拉斐尔施瓦辛格 2017年11月2日
评论道: 斯蒂芬。 2017年11月2日
嗨,我想问一下,我如何对一个n维矩阵求和,除了一维,所以输出是一个向量。的 ndims 正手是不知道的。求和总是给出一个向量。(在我的例子中,是统计学的边缘pdf)。类似于和(K(:)除了第i维)
一个周期内最好的( ndims 不知道)。
例如具有矩阵 K ,总和为[6 22],[12 16],[10 18]
K (:: 1) =
0 1
2 3.
K (:: 2) =
4 5.
6 7
3评论
拉斐尔施瓦辛格
拉斐尔施瓦辛格 2017年11月2日
22岁,谢谢。
我有一个m^n矩阵作为输入和输出n个长度为m的向量。

登录评论。

接受的答案

斯蒂芬。
斯蒂芬。 2017年11月2日
编辑:斯蒂芬。 2017年11月2日
这里有一个非常简单的方法:
>> D = 3;% 尺寸
>> v = 1:ndims(K);
>> v([1,d]) = v([d,1]);
>> S = SUM(REPAPE(允许(k,v),尺寸(k,d),[]),2)
S =
6
22
它通过交换 第一的 想要的 尺寸,然后重塑,使得所有尾随尺寸减少到一个。然后沿着每一行逐渐变得如此。
注意,我在这里展示的方法还具有它所具有的显著优势 从输入数组中使用数据的副本创建任何变量:这对于缩放到更大的输入阵列将是重要的。还注意到慢而复杂 arrayfun 或者 Cellfun. 此任务所需!
4评论
斯蒂芬。
斯蒂芬。 2017年11月2日
@Rafael Schwarzenegger:输入数组的尺寸是用 ndims (K)

登录评论。

答案(1)

塞德里克Wannaz
塞德里克Wannaz 2017年11月2日
这里有一种方法,但可能还有更简单的方法:
buffer = arrayfun(@ k) permute(KL, circshift(1:ndims(KL), k-1)), 1:ndims(KL),“UniformOutput”, 错误的) ;
s = cellfun (@ (M)和(重塑(M,[],大小(M, 2))),缓冲区,“UniformOutput”, 错误的) ;
在哪里 年代 是由和向量组成的单元格数组。
编辑: 我没有时间,但也许你可以看到尺寸如何与shiftdim一起使用,了解如何根据需要进行排序的输出:
@(k) * * * * * * * * * * * * *“UniformOutput”, 错误的) ;
s = cellfun (@ (M)和(重塑(M,[],大小(M, 2))),缓冲区,“UniformOutput”, 错误的) ;
PS: 你必须测试它是否真的满足你的需要。该方法基于MATLAB首先读取内存列的事实
4评论
拉斐尔施瓦辛格
拉斐尔施瓦辛格 2017年11月2日
@Cedric Wannaz:谢谢你。

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!