相关疑难解决方法(0)

在matlab中传递数组,没有开销(最好是"引用"),以避免复制复杂的代码块?

我在Matlab脚本中有复杂的代码块,它们作用于大型非稀疏数组.该代码对数组中的随机元素以及读取操作执行许多写操作.相同的代码必须针对不同的(大)数组执行(即,相同的代码块,不同的数组变量名称除外).

我不想要只有数组名称不同的长重复代码块.

不幸的是,当我创建一个函数来执行操作时,所以代码块只出现一次,性能会降低10倍或更多(可能是由于复制了数组).但是,我不需要复制数组.我宁愿"通过引用传递",因此函数调用的目的只是为了避免重复的代码块.但是,似乎没有办法避免写时复制语义.

此外,我不可能(据我所知)创建一个脚本(而不是函数)来实现这一点,因为脚本必须包含与调用脚本相同的变量名称,因此我需要为每个数组使用不同的脚本我希望运行脚本,它什么也得不到(我仍然会有重复的代码块).

我已经考虑创建一个别名变量名称来"替换"感兴趣的数组变量名称,在这种情况下,我可以调用脚本并避免重复的代码.但是,我找不到任何在Matlab中创建别名的方法.

最后,我尝试编写一个利用该evalin()函数的函数,并将数组变量的字符串名称传递给此函数,但是虽然这有效,但性能也要慢得多 - 与将值按值传递给函数大致相同(性能至少下降10倍).

我得出的结论是,在Matlab中,在非稀疏数组上执行复杂操作时,避免重复代码块是不可能的,以避免Matlab似乎使用避免重复代码块的任何可能技术所带来的可怕开销.

我觉得很难相信,但我无法找到解决办法.

有没有人知道在Matlab中对多个非稀疏数组执行相同的复杂操作时避免重复代码块的方法?

matlab

8
推荐指数
1
解决办法
3563
查看次数

从C数组初始化ublas向量

我正在使用C++ ublas库编写一个Matlab扩展,我希望能够从Matlab插件传递的C数组中初始化我的ublas向量.如何在没有(为了提高效率)显式复制数据的情况下从C数组初始化ublas向量.我正在寻找以下代码行:

using namespace boost::numeric::ublas;

int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);
Run Code Online (Sandbox Code Playgroud)

通常,是否可以std::vector从数组初始化C++ ?像这样的东西:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int pv[4] = { 4, 4, 4, 4};
    vector<int> v (pv, pv+4);

    pv[0] = 0;
    cout << "v[0]=" << v[0] << " " << "pv[0]=" << pv[0] << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但初始化不会复制数据.在这种情况下输出是

v[0]=4 pv[0]=0
Run Code Online (Sandbox Code Playgroud)

但我希望输出相同,更新C数组会更改C++向量指向的数据

v[0]=0 pv[0]=0
Run Code Online (Sandbox Code Playgroud)

c++ matlab vector ublas

6
推荐指数
2
解决办法
5829
查看次数

标签 统计

matlab ×2

c++ ×1

ublas ×1

vector ×1