代码比较细胞与MATLAB的范围

10视图(30天)
尼玛Mehdiabadi压力
尼玛Mehdiabadi压力 2017年10月1日
编辑: Stephen23 2017年10月1日
我想写一个代码可以用一系列比较细胞。在这种情况下,我有一个代码以平均特定范围内的一组数据,然后当它完成我想要比较细胞细胞中的值是否在范围内,如果较小,平均值,然后显示1如果不显示2。例如我有一个数据是这样的:
0.1,0.6,1.1,0.15,0.55
第一次取平均值之间的数字0.5,1.5。平均上面的数字是:
范围平均
0.5 - 0.125
1.0 - 0.575
1.5 - 1.1
然后,我想比较细胞,如果第一个值在0到0.5之间,比的平均范围小,显示1,如果大于其平均显示2。如果是0.5到1和小于平均范围,显示3如果大秀4和一个。所以,上面所示的数字会让这样的地图:
1、4、5、2、3
我的代码是:
%的索引
行= 1;
坳= 1;
= 1;
%的常量
MAX_RANGE = 5;
MAX_DISPLAY_VALUE = 10;
HIGH_ERROR = 2.5;
LOW_ERROR = 0.0;
%范围值变量
MAX_RANGE rangeValue = 0 (1);
MAX_RANGE rangeTotalForAverages = 0 (1);
MAX_RANGE rangeAveragesCount = 0 (1);
MAX_RANGE rangeCount = 0 (1);
MAX_RANGE rangeAverage = 0 (1);
%显示值我会提取
displayValue = 0 (MAX_DISPLAY_VALUE);
displayValueCount = 0 (MAX_DISPLAY_VALUE);
%设置范围界限
rangeValue (1) = 0.5;
rangeValue (2) = 1.0;
rangeValue (3) = 1.5;
rangeValue (4) = 2.0;
rangeValue (5) = 2.5;
%读取文件
rawData = dlmread (“data_1.csv”,”、“);
%的大小
[MAX_ROWS, MAX_COLS] =大小(rawData);
%地图数组
errorMap =双(0 (MAX_ROWS MAX_COLS));
classificationMap =双(0 (MAX_ROWS MAX_COLS));
%围捕一个函数
值=装天花板(rawData(行,坳)* 1000)/ 1000;
%打印原始数据
流(“原始数据\ n”);
行= 1:MAX_ROWS
坳= 1:MAX_COLS
流(' % 0.3 f 'rawData(行)上校);
结束
流(' \ n ');
结束
%地图打印错误
流(“错误地图\ n”);
行= 1:MAX_ROWS
坳= 1:MAX_COLS
如果rawData(行)上校> HIGH_ERROR
errorMap(行,坳)= rawData(行,坳);
rawData(行,坳)= HIGH_ERROR;
如果< LOW_ERROR坳rawData(行)
errorMap(行,坳)= rawData(行,坳);
rawData(行,坳)= LOW_ERROR;
结束
结束
流(' % 0.3 f 'errorMap(行)上校);
结束
流(' \ n ');
结束
%打印的数据
流(“圆形数据\ n”);
行= 1:MAX_ROWS
坳= 1:MAX_COLS
值=装天花板(rawData(行,坳)* 1000)/ 1000;
流(' % 0.3 f '、价值);
结束
流(' \ n ');
结束
%计算和存储每个范围的平均值
行= 1:MAX_ROWS
坳= 1:MAX_COLS
值=装天花板(rawData(行,坳)* 1000)/ 1000;
范围= 1:MAX_RANGE
如果值< = rangeValue(范围)
rangeTotalForAverages(范围)= rangeTotalForAverages(范围)+价值;
rangeAveragesCount(范围)= rangeAveragesCount(范围)+ 1;
rangeCount(范围)= rangeCount(范围)+ 1;
打破
结束
结束
结束
结束
范围= 1:MAX_RANGE
如果rangeAveragesCount(范围)> 0
rangeAverage(范围)= rangeTotalForAverages(范围)/ rangeAveragesCount(范围);
结束
结束
%打印的平均
流(“平均\ n”);
范围= 1:MAX_RANGE
流(' % 0.3 f 'rangeAverage(范围));
流(' \ n ');
结束
%创建分类映射
tempDisplayValueIndex = 0;
行= 1:MAX_ROWS
坳= 1:MAX_COLS
值=装天花板(rawData(行,坳)* 1000)/ 1000;
范围= 1:MAX_RANGE
%如果值范围
如果值< = rangeValue(范围)
%如果值小于平均范围,设置显示值
tempDisplayValueIndex =范围* 2;
如果值< = rangeAverage(范围)
classificationMap(行,坳)= displayValue (tempDisplayValueIndex);
displayValueCount (tempDisplayValueIndex) = displayValueCount (tempDisplayValueIndex) + 1;
其他的
%存储分类地图和计数显示值
classificationMap(行,坳)= displayValue (tempDisplayValueIndex + 1);
displayValueCount (tempDisplayValueIndex) = displayValueCount (tempDisplayValueIndex) + 1;
结束
打破;
结束
结束
结束
结束
%打印分类图
流(“\ n \ nClassification地图”);
行= 1:MAX_ROWS
坳= 1:MAX_COLS
流(' % f 'classificationMap(行)上校);
结束
流(' \ n ');
结束
它只在地图打印0的值! !

答案(2)

Stephen23
Stephen23 2017年10月1日
编辑:Stephen23 2017年10月1日
是没有意义的编写MATLAB代码像复杂的c++代码,有大量的循环和ifs。MATLAB代码应该是优雅的、清晰的和整洁。
> > V = (0.1, 0.6, 1.1, 0.15, 0.55);%值
> > E = 0:0.5:1.5;%本边缘
> > [~ X] = histc (V, E);
> > M = accumarray (X (:), V (:), [], @mean)
M =
0.12500
0.57500
1.10000
> > E (2, 1: end-1) = M;
> >总和(bsxfun (@lt E (1: end-1)。”, V) 1)
ans =
1 2 3 4 5

Yogananda Jeppu
Yogananda Jeppu 2017年10月1日
不要使用Matlab像C代码解释器。Matlab具有优雅的功能,可以帮助你很容易数据操作。你可以很容易地用一组数字(参见帮助cell2mat)。一旦你有了一个数组的数字使用find命令查找索引或行值范围内。我使用这个二=找到(> 0.5 & & < = 1);二世将所有的指标,这是真的。取平均值。在新指数再次发现上方和下方这个平均使用。“发现”是非常强大的。使用它。

标签

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!