相关疑难解决方法(0)

在Matlab中使用i和j作为变量

i并且j是非常流行的变量名称(参见例如,这个问题这个).

例如,在循环中:

for i=1:10,
    % do something...
end
Run Code Online (Sandbox Code Playgroud)

作为矩阵的索引:

mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)

为什么不应该他们作为在Matlab的变量名?

variables matlab naming-conventions

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

MATLAB中未知长度的矩阵?

我正在尝试设置一个可变长度的零矩阵,其中有两列我可以输出while循环的结果(目的是使用它来存储来自Euler方法的步骤数据和调整后的时间步长).长度将由循环的迭代次数确定.

我想知道是否有一种方法可以在我运行循环时执行此操作,或者是否需要将其设置为开始,以及如何执行此操作.

matlab matrix variable-length

24
推荐指数
3
解决办法
6万
查看次数

在Matlab中预分配数组?

我使用一个简单的for循环来裁剪大量图像,然后将它们存储在单元格数组中.我一直收到消息:

变量croppedSag似乎在每次循环迭代时改变大小.考虑预先分配速度.

我在MATLAB编写代码之前已经多次看过这个.我总是忽略它,并且好奇有多少预先分配将增加运行时间,如果我有10,000个图像或更大的数字?

另外,我已阅读有关在文档中预分配的内容,并说它zeros()可用于此目的.我如何将其用于下面的代码?

croppedSag = {};
for i = 1:sagNum
    croppedSag{end+1} = imcrop(SagArray{i},rect);
end
Run Code Online (Sandbox Code Playgroud)

我没有完全按照文档中的示例进行操作.

arrays matlab memory-management pre-allocation

7
推荐指数
1
解决办法
7979
查看次数

为什么我的嵌套for循环计算时间太长?

我有一个代码,可以生成0到36之间4个整数的所有可能组合.

这将是37 ^ 4个数字= 1874161.

我的代码是用MATLAB编写的:

i=0;
for a = 0:36
    for b= 0:36
        for c = 0:36
            for d = 0:36
                i=i+1;
                combination(i,:) = [a,b,c,d];             
            end          
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

我用数字3而不是数字来测试这个,36它运行正常.

如果有1874161个组合,并且An过度警告猜测100个时钟周期来进行添加并写入值,那么如果我有一个2.3GHz的PC,那么:

1874161*(1/2300000000)*100 = 0.08148526086

几分之一秒.但到目前为止它已经运行了大约半个小时.

我确实收到了一个警告combination changes size every loop iteration, consider predefining its size for speed,但这不能影响那么多吗?

algorithm time big-o matlab nested-loops

3
推荐指数
1
解决办法
149
查看次数

Matlab:在循环中生长的数组 - 那么什么?

我有这个代码(将图像读入一个巨大的矩阵)

allImages = [];
for ii = 1 : n
    img = imread( fileNames{ii} );
    img = imresize( rgb2gray(img), [100 100] );
    allImages = cat(3, allImages, img ); % append image to huge matrix
end
Run Code Online (Sandbox Code Playgroud)

Matlab指出我在循环中的最后一行警告我allIamges在循环内增长.

那么这里最重要的是什么?

performance matlab memory-management

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

在这种情况下如何删除预分配警告

使用for循环绘制一组图形时,例如:

for ei=1:length(E),
  hnds(ei) = plot(1:nP, avgR(ei,:), [clrStr(ei),'-'] ); 
end 
Run Code Online (Sandbox Code Playgroud)

hnds(ei)变量的代码中有一个(著名的)警告:

变量hnds(ei)似乎在每次循环迭代时都会更改大小。考虑预先分配速度。

但是,当我尝试预分配变量时:

hnds = zeros(1,length(E));
Run Code Online (Sandbox Code Playgroud)

此新行还有另一条警告,在预分配的详细信息中说:

建议的操作:避免将内存预先分配给分配给另一个函数输出的变量。

有什么办法可以消除此警告,还是应该忽略它?

matlab allocation

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