如何以更为惯用和高效的方式重新编写此MATLAB代码?
这是一个要求:输入是一个数字,它将图像分成几个相等的部分。例如,如果输入为4,它将返回3部分:值是如何以更为惯用和高效的方式重新编写此MATLAB代码?,matlab,refactoring,Matlab,Refactoring,这是一个要求:输入是一个数字,它将图像分成几个相等的部分。例如,如果输入为4,它将返回3部分:值是imgSize/4imgSize/4*2和imgSize/4*3 如果输入是n,则它将返回n-1元素,如下实现: if (colorLevel == 8) divide_thres = [ round(imgSize/8) round(imgSize/8)*2 round(imgSize/8)*3 round(imgSize/8)*4 round(imgSize/8)*5
imgSize/4
imgSize/4*2
和imgSize/4*3
如果输入是n
,则它将返回n-1
元素,如下实现:
if (colorLevel == 8)
divide_thres = [ round(imgSize/8) round(imgSize/8)*2 round(imgSize/8)*3 round(imgSize/8)*4
round(imgSize/8)*5 round(imgSize/8)*6 round(imgSize/8)*7 ];
elseif (colorLevel == 4)
divide_thres = [ round(imgSize/4) round(imgSize/4)*2 round(imgSize/4)*3 ];
elseif (colorLevel == 3)
divide_thres = [ round(imgSize/3) round(imgSize/3)*2 ];
end
我想允许用户输入一个介于2和255之间的值,然后自动生成与该输入相对应的divide\u thres
。如何重新编写此代码以提高效率?这样就可以了-
divide_thres = [1:colorLevel-1]*round(imgSize/colorLevel)
这应该可以-
divide_thres = [1:colorLevel-1]*round(imgSize/colorLevel)
您的代码有几个问题:
- 在每种情况下,您都会不必要地将
除以同一个因子多次(而不是一次性)imgSize
- 您可以执行许多“手动”标量乘法,但只需将标量值乘以范围
生成的向量即可1:colorLevel-1
- 由于生成的
向量的长度可以很容易地从divide_thres
的值计算出来,因此不需要在colorLevel
语句中单独处理每种情况 此外,即使您必须以不同的方式计算案例if
=imgSize
、3
和4
的长度,您最好使用8
语句而不是switch
语句,因为前者可以省去每次编写if
的麻烦,这很容易出错,并导致代码重复imgSize==…
if 2 <= colorLevel && colorLevel <= 255
divide_thres = round(imgSize / colorLevel) * (1 : colorLevel - 1);
else
error('invalid colorLevel value') % (or some other informative message)
end
如果2您的代码有几个问题:
- 在每种情况下,您都会不必要地将
imgSize
除以同一个因子多次(而不是一次性)
- 您可以执行许多“手动”标量乘法,但只需将标量值乘以范围
1:colorLevel-1
生成的向量即可
- 由于生成的
divide_thres
向量的长度可以很容易地从colorLevel
的值计算出来,因此不需要在if
语句中单独处理每种情况
此外,即使您必须以不同的方式计算案例imgSize
=3
、4
和8
的长度,您最好使用switch
语句而不是if
语句,因为前者可以省去每次编写imgSize==…
的麻烦,这很容易出错,并导致代码重复
这里有一个非常简单的方法:
if 2 <= colorLevel && colorLevel <= 255
divide_thres = round(imgSize / colorLevel) * (1 : colorLevel - 1);
else
error('invalid colorLevel value') % (or some other informative message)
end
如果您的代码仅适用于colorLevel=3,4,8
,但您的文本显示“输入一个从2到255的值”?那么,如果用户输入一个其他值
3,4,8`,该怎么办?是的,我想容纳从2到255的每个数字,我只给出了3,4,8作为三个示例。用户是否也可以输入n=1
?如果是,输出必须是什么?n=1
在我的例子中应该只返回一个错误。您的代码只适用于colorLevel=3,4,8
,但您的文本显示“输入一个从2到255的值”?那么,如果用户输入其他值
3,4,8`,该怎么办?是的,我想容纳2到255之间的每个数字,我只给出了3,4,8作为三个示例。用户也可以输入n=1
?如果可以,输出必须是什么?n=1
应该只是在我的情况下返回一个错误。谢谢您的回答!谢谢你的回答!