1

Matlab中,我有一个向量Muen,我想通过将其分成不同长度的 bin 来减小它的大小。该向量有一些需要高精度 bin 的值和许多大致相等的值,可以收集到最大为几百个值的 bin 中。我还需要知道进入新 bin 的所有旧 bin 的索引,以缩短 sencod vector fluence

目标是通过使用由Meun确定的不同大小的 bin来加速两个向量 sum( fluence .* Muen ) 的求和,并在向量乘法之前对新 bin中的流量求和。为此,我尝试使用

edges=[min(Muen):0.0001:Muen(13),Muen(12:-1:1)); 
[N,bin]=histc(*Muen*,edges) 

问题是如何制作向量边缘,因为Muen的最大值和最小值之间存在很大差异,而其他值之间存在很小的差异。有没有办法根据导数Muen制作边缘的步骤?

为了获得更短的Muen版本,就像

MuenShort=N.*edges;  

但它没有正确退出(可能是边缘故障),有什么建议吗?

我也不太明白bin如何给出进入新 bin 的值的索引?

澄清:我想做的是从向量mMuen中取出大致相等的元素并用一个元素替换 ,同时跟踪哪个元素进入新向量nMuenShort的索引。例如 {m1}->n1,(1), {m2}->n2,(2), {m3,m4}-> m3=m4=n3,(3,4),{m5,m6,m7,m8 }-> m5=m6=m7=m8=n4,{5,6,7,8}... 其中 n1>>n2 但 n3 和 n4 之间的差异可能不会那么大。每个 n 元素中的 m 元素数量应由彼此大致相等的 m 元素数量决定,或者更确切地说,它们位于两个限制之间。所以 bin 的大小应该在一个元素到几百个元素之间变化。
然后我想使用索引来制作影响力向量更短

fluenceShort(1:length(MuenShort))= [sum(fluence(1)),sum(fluence(2)),sum(fluence(3,4)),sum(fluence(5,6,7,8)) ...]; 目标=总和(fluenceShort.*MuenShort)

有没有办法在 Matlab 中实现这一点?

4

1 回答 1

1

即使我不清楚您的问题,我也会建议您这样做。也许你可以对你的向量进行排序muen,选择一个固定的数字,n并定义每个 bin 以便它包含. 为简单起见,假设 的长度是 的倍数:nmuenmuenn

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箱。Bin 边缘恰好位于相邻 bin 的最接近值之间。因此,第一个 bin 的上边缘是(muen_sorted(n)+muen_sorted(n+1)/2; 下一个 bin 的上边缘是(muen_sorted(2*n)+muen_sorted(2*n+1)/2,依此类推。

每个 bin (vector ) 的“代表值”muen_short被计算为mean位于该 bin 中的值。或者可能median更有意义,具体取决于您的应用程序。

作为此代码的结果,muen_short(1)是对应于带有边缘的 bin 的值edge(1)edge(2); muen_short(2)是对应于带有边edge(2)edge(3)等的 bin 的值。

您现在可以使用该变量edges来构建fluence具有这些相同边缘的直方图。

于 2013-08-08T23:00:48.550 回答