Arrays 在LabVIEW中将常量添加到数组列的最有效方法是什么?

Arrays 在LabVIEW中将常量添加到数组列的最有效方法是什么?,arrays,labview,Arrays,Labview,我想在数组的第二列中添加一个常量 我这样做如下所示: 如图所示,数值如下所示: 向数组列添加常量的最有效方法是什么 索引数组以获取第二列,添加常量,然后替换数组子集以替换第二列。 索引数组以获取第二列,添加常量,然后替换数组子集以替换第二列。 关于效率的问题,您应该提供数字。对于低于1000 x 1000的2D阵列,我无法测量差异。通常最好是简单地测试一下 这里是测试代码(与crossrulz的答案相同) 使用10000 x 10000阵列,选项2的速度大约快10倍 一句话除非你的要求很高

我想在数组的第二列中添加一个常量

我这样做如下所示:

如图所示,数值如下所示:


向数组列添加常量的最有效方法是什么

索引数组以获取第二列,添加常量,然后替换数组子集以替换第二列。

索引数组以获取第二列,添加常量,然后替换数组子集以替换第二列。

关于效率的问题,您应该提供数字。对于低于1000 x 1000的2D阵列,我无法测量差异。通常最好是简单地测试一下

这里是测试代码(与crossrulz的答案相同)

使用10000 x 10000阵列,选项2的速度大约快10倍

一句话除非你的要求很高,否则可读性通常比效率更受欢迎。在我看来,选项2更具可读性,因为它没有for循环,常量是作为常量而不是数组显示的

但是,通过使用就地元素结构,您可以获得更高的效率。下图显示了向列中添加5的两种不同方式。第二种方法避免了对整个阵列进行内存复制。用索引数组索引出数组的一列,然后修改它需要改变底层内存格式,即使数组将被放回Replace数组子集。就地元素结构为LabVIEW提供了足够的上下文,使其能够识别添加可以在没有数据副本的情况下完成。

关于效率的问题,您应该提供数字。对于低于1000 x 1000的2D阵列,我无法测量差异。通常最好是简单地测试一下

这里是测试代码(与crossrulz的答案相同)

使用10000 x 10000阵列,选项2的速度大约快10倍

一句话除非你的要求很高,否则可读性通常比效率更受欢迎。在我看来,选项2更具可读性,因为它没有for循环,常量是作为常量而不是数组显示的

但是,通过使用就地元素结构,您可以获得更高的效率。下图显示了向列中添加5的两种不同方式。第二种方法避免了对整个阵列进行内存复制。用索引数组索引出数组的一列,然后修改它需要改变底层内存格式,即使数组将被放回Replace数组子集。就地元素结构为LabVIEW提供了足够的上下文,使其能够识别添加可以在没有数据副本的情况下完成。

您的文字与图片不同。是否要将单个常量添加到2D数组的列中(如crossrulz所示),还是要添加到如图所示的数组中。文本与图片不同。您是想向2D数组的一列中添加一个常量(如crossrulz所示),还是想向图中所示的数组中添加一个常量。这是否更有效?add还在列数组中循环吗?这是一个很难回答的问题。在低级和矩阵算法上,通常会进行大量的编译器优化。有时明显,有时不那么明显。这本身就是一个完整的领域,即使是存储矩阵的方式和处理器体系结构也会发挥作用。这就是为什么通常最好在预期的系统上测试响应。这实际上更有效吗?add还在列数组中循环吗?这是一个很难回答的问题。在低级和矩阵算法上,通常会进行大量的编译器优化。有时明显,有时不那么明显。这本身就是一个完整的领域,即使是存储矩阵的方式和处理器体系结构也会发挥作用。这就是为什么通常最好在预期系统上测试响应。所以。。。我讨厌成为坏消息的传递者。。。但是索引数组/替换数组序列?那真是效率低下。这是阵列的完整数据副本。打开工具>>配置文件>>显示缓冲区分配,您可以看到--Add原语将执行整个缓冲区分配(CH窗口在Add的左侧显示子阵列,在Add的右侧显示非子阵列)。改用内建图元结构。这里有更多的连接(因为您必须使元素访问显式),但代码执行效率更高。我应该澄清我之前的评论:子数组和缓冲区alloc在索引行时发生。为列编制索引时,LV总是复制一份。内存布局的怪癖。我真的应该对此进行更多的调查。似乎可以改进。@srm感谢您的大量添加。我已经感觉到LV可能会提供更高效的内存结构,但我没有时间研究它。干得好。
就地元件结构
谢谢!这就是我想记住的!!所以我讨厌成为坏消息的传递者。。。但是索引数组/替换数组序列?那真是效率低下。这是阵列的完整数据副本。打开工具>>配置文件>>显示缓冲区分配,您可以看到--Add原语将执行整个缓冲区分配(CH窗口在Add的左侧显示子阵列,在Add的右侧显示非子阵列)。改用内建图元结构。这里有更多的连接(因为您必须使元素访问显式),但代码执行效率更高。我应该澄清我之前的评论:子数组和缓冲区alloc在索引行时发生。为列编制索引时,LV总是复制一份。内存布局的怪癖。我真的应该对此进行更多的调查。似乎可以改进。@srm感谢您的大量添加。我读过