在 Matlab 中我有一个向量 Muen ,我希望通过将其分成不同的长度来减小它的大小。向量具有一些需要高精度区间的值和许多大致相等的值,并且可以被收集到大小为几百个值的区间中。 我还需要知道进入新垃圾箱的所有旧垃圾箱的索引,以便缩短一个传感器 fluence 。
目标是通过使用由 Meun 确定的不同大小的箱子来加速两个矢量和( fluence 。* Muen )的总和。并在向量乘法之前将注量的总和加到新的bin中。 为此,我尝试使用
edges=[min(Muen):0.0001:Muen(13),Muen(12:-1:1));
[N,bin]=histc(*Muen*,edges)
问题是如何制作矢量 edge ,因为 Muen 的最大值和最小值之间存在很大差异,而其他值之间的差异很小。有没有办法根据派生 Muen 制作 edge 的步骤?
为了获得更短版本的 Muen ,就像
MuenShort=N.*edges;
但它无法正常退出(可能是 edge 中的错误),有什么建议吗?
我也不知道 bin 如何给出进入新分档的值的索引?
澄清: 我想要做的是从一个向量 m 或 Muen 获取大致相等的元素并用一个元素替换并同时跟踪索引哪个元素进入新的向量 n 或 MuenShort 。例 {m1} - > n1,(1),{m2} - > n2,(2),{m3,m4} - > M3 = M4 = N3,(3,4),{M5,M6,M7,M8} - GT; M5 M6 = M7 = = = M8 N4,{5,6,7,8} ... 其中n1>> n2但n3和n4之间的差异可能不是那么大。每个n元素中的m元素的数量应该由大致彼此相等的m元素的数量确定,或者更确切地说在两个限制之间。因此,容器大小应在一个元素到几百个元素之间变化 然后我想使用索引来缩短注量向量
fluenceShort(1:length(MuenShort))= [sum(fluence(1)),sum(fluence(2)),sum(fluence(3,4)),sum(fluence(5,6,7, 8))...]; 目标=总和(fluenceShort。* MuenShort)
有没有办法在Matlab中实现这个?
答案 0 :(得分:1)
即使我不明白你的问题,我也建议这样做。也许您可以对矢量muen
进行排序,选择固定数字n
,然后定义每个bin,使其包含n
muen
个muen
个值。为简单起见,n
的长度假定为n = 10;
m = length(muen_sorted)/n;
muen_sorted = sort(muen);
edges = [-inf mean([muen_sorted(n:n:end-1); muen_sorted(n+1:n:end)]) inf ];
muen_short = mean(reshape(muen_sorted,n,m));
的倍数:
m+1
请注意,我们会获得edges
个边(向量m
),对应(muen_sorted(n)+muen_sorted(n+1)/2
个二进制位。 Bin边缘恰好位于相邻bin的最接近值之间。因此,第一个bin的上边缘是(muen_sorted(2*n)+muen_sorted(2*n+1)/2
;下一个bin的上边缘是muen_short
,依此类推。
每个bin(vector mean
)的“代表值”被计算为该bin中值的median
。或者muen_short(1)
可能会更有意义,具体取决于您的应用程序。
作为此代码的结果,edge(1)
是与包含边edge(2)
和muen_short(2)
的bin对应的值; edge(2)
是与包含边edge(3)
和edges
等的bin相对应的值。
您现在可以使用变量fluence
来构建具有相同边缘的{{1}}直方图。