例如,在循环中:
for i=1:10,
% do something...
end
Run Code Online (Sandbox Code Playgroud)
作为矩阵的索引:
mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)
为什么不应该他们作为在Matlab的变量名?
我正在尝试设置一个可变长度的零矩阵,其中有两列我可以输出while循环的结果(目的是使用它来存储来自Euler方法的步骤数据和调整后的时间步长).长度将由循环的迭代次数确定.
我想知道是否有一种方法可以在我运行循环时执行此操作,或者是否需要将其设置为开始,以及如何执行此操作.
我使用一个简单的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)
我没有完全按照文档中的示例进行操作.
我有一个代码,可以生成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,但这不能影响那么多吗?
我有这个代码(将图像读入一个巨大的矩阵)
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在循环内增长.
那么这里最重要的是什么?
使用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 ×6
algorithm ×1
allocation ×1
arrays ×1
big-o ×1
matrix ×1
nested-loops ×1
performance ×1
time ×1
variables ×1