首页 新闻 会员 周边

请教:将几组数组进行比较的算法

0
悬赏园豆:200 [已关闭问题]

从几个log文件中读出几组数据,不同文件中每组数据含有相同类型(内容)的列。比如列1是WiFi无线设备中的RSSI,而列2是相对应的传输率等等:

文件1是一个牌子的测试得到的数据:

(列1)-50, (列2)5.8,(列3)78,...
(列1)-39, (列2)7.6,(列3)32,...
(列1)-48, (列2)5.2,(列3)69,...
(列1)-50, (列2)6.0,(列3)47,...
...

文件2是另一个牌子的测试得到的数据:

(列1)-30, (列2)5.8,(列3)46,...
(列1)-37, (列2)4.6,(列3)51,...
(列1)-42, (列2)4.9,(列3)64,...
(列1)-49, (列2)3.8,(列3)38,...
(列1)-50, (列2)2.8,(列3)31,...

...

单独打开其中一个文件,比如文件一,任意取2个列,(列1)做X轴,(列2)做Y轴,用OWC可以做出一个散点图。(同一个X值对应了几个不同的数值)

|           *********
|       ********       *
|   ***    *****
|   *     **    *
|   **        *      
|   *
|———————————————————— X

我需要进行不同文件之间的比较,用文件一的列一和文件二的列一作为X轴,可以用每个数字作为一个单元格(-1,-2, 到-99),而用他们的列2作为Y轴的值,画出2条线型图,这样就可以比较2次log的某一列。比如绿色是文件一中对应X的第2列计算出来的平均值,而红色为文件二中对应相同的X的第2列计算出来的平均值。

|         *  ********* (文件一 列2)
|               
|   *        *    ****
|       * *                  ********* (文件二 列2)
|   *  *   
|   *
|———————————————————— X

问题是:log 文件中的数组不是有序的。作为X轴的(列一)每个点有不同的(列二)值。而且也不是连续的。有些单元格可能没有值。但需要一个数字不能为空。需要把2个文件的X轴作统一,然后计算出每个点相对应的单个文件中的几个值的平均值,才有可能画出一个线型图。也就是说,一个X的单元格对应一个Y轴的值的一个数组。

程序用C#.net 开发。主要想请教高手用什么方式找出基于(列1)的(列2)的平均值。

非常感谢!

补充一句,我使用OWC在界面画图,需要的数组格式要连续的字符串“5.6,3.5,8.0,6.8,3..."

问题补充: 我想到要用dictionary, 可是怎样能高效地对比,插入数据,计算均值呢?因为处理的数据量如果达到1百万以上,速度如何呢?
绿茶飘香的主页 绿茶飘香 | 初学一级 | 园豆:0
提问于:2010-02-05 05:47
< >
分享
其他回答(2)
0

先用 Dictinary 对两个文件中所有的X轴数据进行整合,将X相同的合并到一个数组中,然后将Dictionary 中的Key(即X值)全部取出进行排序,得到排序后的X序列,然后再对每个X对于的Y(即Dictionary 的Value ,应该是一个Y的数组)进行排序,最后绘图

eaglet | 园豆:17139 (专家六级) | 2010-02-05 07:02
0

基本思路正如楼上所说,但是Dictinary得值需要一个KeyValuePaire

这样可以在KeyValuePaire里保存列2的值的总和和出现的次数

这样就可以用KeyValuePaire的key除以value得到平均值了

呵呵,麻烦,需要代码的话下次奉上,今天要下班了就不贴了。

Tom-X | 园豆:515 (小虾三级) | 2010-02-05 17:43
0

采用SortedList,实现IComparer接口,进行排序

查尔斯 | 园豆:3832 (老鸟四级) | 2010-02-06 11:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册