我在 Matlab 脚本中有复杂的代码块,它们作用于大型非稀疏数组。该代码对数组中的随机元素执行许多写入操作,以及读取操作。相同的代码必须针对不同的(大)数组(即,相同的代码块,不同的数组变量名除外)执行。
我不希望只有数组名称不同的长而重复的代码块。
不幸的是,当我创建一个函数来执行操作时,代码块只出现一次,性能会降低 10 倍或更多(可能是由于数组的复制)。但是,我不需要复制数组。我更喜欢“通过引用传递”,这样函数调用的目的只是为了避免重复的代码块。然而,似乎没有办法避免写时复制语义。
此外,不可能(据我了解)创建一个脚本(不是函数)来实现这一点,因为脚本必须包含与调用脚本相同的变量名,所以我需要为每个数组使用不同的脚本我希望运行脚本,但没有任何收获(我仍然会有重复的代码块)。
我已经研究过创建一个别名变量名来“替换”感兴趣的数组变量名,在这种情况下,我可以调用脚本并避免重复代码。但是,我找不到在 Matlab 中创建别名的任何方法。
最后,我尝试编写一个利用该函数的函数,并将数组变量的字符串evalin()
名称传递给该函数,但尽管这可行,但性能也慢得多——与将数组按值传递给函数大致相同(性能至少下降 10 倍)。
我得出的结论是,在对非稀疏数组执行复杂操作时,在 Matlab 中不可能避免重复代码块,以避免使用任何可能的避免重复代码块的技术来避免 Matlab 似乎呈现的可怕开销。
我觉得这很难相信,但我找不到解决办法。
在 Matlab 中对多个非稀疏数组执行相同的复杂操作时,有人知道避免重复代码块的方法吗?