相关疑难解决方法(0)

matlab初始化对象数组

我在MATLAB中玩OOP,我有以下构造函数:

function obj = Squadron(num_fighters, num_targets, time_steps)            
    if nargin == 0
        num_targets = 100;
        time_steps = 100;
        num_fighters = 10;
    end
    obj.num_shooters = num_fighters;
    for iShooter = 1:obj.num_shooters
       a(iShooter) = Shooter(num_targets, time_steps);
    end
    obj.ShooterArray = a;
    obj.current_detections = zeros(num_fighters, num_targets);
end

那个临时变量'a'闻起来很可怕.有没有更好的方法来初始化一个对象数组,我希望有一个推/弹方法.我相信有更好的方法可以做到这一点.

arrays oop matlab

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

如何在MATLAB中预分配非数值向量?

我经常发现自己在做这样的事情:

unprocessedData = fetchData();  % returns a vector of structs or objects
processedData = [];             % will be full of structs or objects

for dataIdx = 1 : length(unprocessedData) 
    processedDatum = process(unprocessedData(dataIdx));
    processedData = [processedData; processedDatum];
end
Run Code Online (Sandbox Code Playgroud)

尽管功能强大,但并不是最佳选择- processedData向量在循环内增长。甚至mlint警告我,我应该考虑预先分配速度。

如果数据是的向量int8,我可以这样做:

% preallocate processed data array to prevent growth in loop
processedData = zeros(length(unprocessedData), 1, 'int8');
Run Code Online (Sandbox Code Playgroud)

并修改循环以填充向量插槽,而不是连接起来。

有没有一种方法可以预分配向量,以便随后可以容纳结构或对象?


更新:Azim的回答启发,我只是颠倒了循环顺序。首先处理最后一个元素将在第一次命中时强制整个向量进行预分配,因为调试器确认:

unprocessedData = fetchData();

% note that processedData isn't declared outside the loop - this …
Run Code Online (Sandbox Code Playgroud)

matlab pre-allocation matlab-struct

5
推荐指数
2
解决办法
4061
查看次数

有没有更好的方法在MATLAB中声明一个空的,类型化的矩阵?

有没有办法在MATLAB中"声明"具有特定用户定义类型的变量?zeros()仅适用于内置数值类型.我提出的唯一解决方案是使用repmat()复制虚拟对象零次:

arr = repmat(myClass(), [1 0])
Run Code Online (Sandbox Code Playgroud)

如果不以这种方式声明变量,任何执行"arr(end + 1)= myClass()"的代码都必须包含默认空矩阵的特殊情况,该矩阵的类型为double.

我错过了一些更明智的事吗?

matlab types matrix

5
推荐指数
1
解决办法
2346
查看次数

标签 统计

matlab ×3

arrays ×1

matlab-struct ×1

matrix ×1

oop ×1

pre-allocation ×1

types ×1