编码实践:何时使用结构而不是分离变量?

24日视图(30天)
如果处理x, y, z坐标和参数为每个笛卡尔轴,使用一个结构有什么好处而不是分离变量甚至3 x1向量?
“本能”,似乎好存储结构为了整洁,但这是浪费内存吗?一个结构三个字段占用更多的内存比三个变量?我会这么想,因为存储字段名称除了结构名称。但是如果我让三个变量而不是一个结构,不杂乱工作区吗?你怎么决定以何种方式来存储和操纵的价值观?
更大的背景下,下面的代码片段我正在(增加从一个函数中调用一个函数,我想知道为什么要整齐地负利润值存储在一个结构如果函数将从内存中清除完):
[PixelsToAdd。x, NegMarginX] = DeterminePixelsToAdd (RandomMotion.x, mmperpixel DistFromCenterToPixelEdge);
[PixelsToAdd。y, NegMarginY] = DeterminePixelsToAdd (RandomMotion.y, mmperpixel DistFromCenterToPixelEdge);
[PixelsToAdd。z, NegMarginZ] = DeterminePixelsToAdd (RandomMotion.z, mmperpixel DistFromCenterToPixelEdge);
1评论
丹尼尔的桥梁
丹尼尔的桥梁 2018年1月30日
我认为正确的使用结构,因为很容易检查参数:
K > > RandomMotion
RandomMotion =
结构体字段:
x (-1.8046 - 1.3639):
y (2.8735 - -0.7147):
z (0.1994 - -3.2835):
K > > PixelShifts
PixelShifts =
结构体字段:
x: [1]
y (1 0):
z: [1]
K > >起源
起源=
结构体字段:
x: 2
y: 1
z: 3

登录置评。

答案(1)

詹姆斯Tursa
詹姆斯Tursa 2018年1月30日
编辑:詹姆斯Tursa 2018年1月30日
我更喜欢使用一个双矩阵来存储x y z数据。例如存储每个x y z三联体列,这使得它更容易做事情像旋转下游用一个简单的矩阵乘法。很容易选择了x或y或z数据和索引也(尽管这并导致深度数据复制)。但它取决于下游代码设置为使用数据。
直接回答你的问题:
“…使用一个结构有什么好处而不是分离变量甚至3 x1向量?”
对于代码整洁,确定一个结构可以使代码更整洁。它花费一点额外的内存结构本身,但不多(只有大约120字节)。也许稍微处理提取x y z数据的时候使用,但是可能没有那么多多余的。下游一个更好的问题或许是你的代码使用变量,因为这可能会决定你应该将数据存储。
“三个字段的结构比三个变量占用更多的内存吗?”
是的。上面每额外花费你大约120字节结构体变量本身。这是无关紧要的,不应该是一个决定性因素在您的编码决定。字段名称也成本稍微更多的内存,但这是更重要的结构开销。再次,额外内存相比,这完全是微不足道的记忆在你的电脑上。别担心。
“但如果我让三个变量而不是一个结构,不杂乱工作区吗?”
它可以。但有多少更多的混乱有一个结构体变量称为mydata vs有三个变量称为mydata_x mydata_y, mydata_z ?没有多少国际海事组织,但它可能取决于 许多 不同的x y z数据你有在你的工作区。
“你怎么决定以何种方式存储和操作值吗?”
我认为这取决于下游的代码来处理数据。如果你总是不得不提取个人从你的变量x y z值合并成一个x y z三联体变量进行处理,然后我就说你存储你的数据不佳和一个矩阵x y z三胞胎在列会更好和更容易提取和处理。但是如果你已经测试&工作代码,使用x y z数据作为单独的变量,然后结构或三个变量的方法可能更适合你。
2的评论
丹尼尔的桥梁
丹尼尔的桥梁 2018年1月30日
因为它是重要的,其他可以阅读我的代码来验证其功能,我想把变量名明确。例如,RandomMotion。y佳在y轴表示随机运动的方式RandomMotion(2)没有。(即读者必须从别处寻找上下文来验证,1,2,3指的是x, y, z)。

登录置评。

社区寻宝

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

开始狩猎!