gpt4 book ai didi

arrays - 使用 end 增长数组时出现意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:14 27 4
gpt4 key购买 nike

在从图像目录构建视频数组时,我遇到了意外行为。原代码:

vid = [];
for i =startframe:endframe
image = [directoryOfImages ,'\', images_names{1,i}];
vid(:,:,:,end+1) = imread(image);
waitbar((i-startframe) / (endframe-startframe));
end

然后我运行这段代码来检查:

a = []; size(a)
a(end+1) = 1; size(a)

第一个尺寸是 [0, 0],第二个尺寸是 [1, 1]。我在这段代码中得到的预期行为相同:

b = []; size(b)
b(:,end+1) = 1; size(b)

第一个尺寸是 [0, 0],第二个尺寸是 [1, 1]。但是在这段代码中,发生了一些奇怪的事情:

c = []; size(c)
c(:,:,end+1) = 1; size(c)

而这里第一个尺寸是 [0,0],第二个尺寸是 [1,1,2]。这是非常出乎意料的。我打印了 c 并得到了这个:

>>c
c(:,:,1) =

0

c(:,:,2) =

1

最后,我运行了这个脚本:

c=[]; c(:,:,end)=1; size(c)

我得到了 [1, 1]

谁能解释一下这是怎么回事?当我使用 c=[] 时,我会得到一个大小为 [0,0,1] 的空数组吗?那么 size(c) 怎么没有提到它呢?为什么当我使用 c(:,:,end)=1; 时它的大小不是 [1,1,1]?当我使用 c(:,:,:,end)=1 时呢?

最佳答案

这只是 MATLAB 选择要显示的内容。

在 MATLAB 中,矩阵是无限维的。作为一个很好的例子,让我们试试你的 b:

b = []; 
b(:,end+1) = 1;

如您所知,您可以使用size 查询特定维度的大小。例如。 size(b,2) 返回 1。但是 size(b,12345) 返回什么?它也返回 1,因为矩阵是无限维的。在第 12345 维中,b 的大小为 1

但是,如果每次键入 size(b) 时显示函数都会输出无限量的维度,那该是多么可怕啊!因此,在显示时,MATLAB 默认显示 2 维或 N 维,其中 N 是上面有数据的最远维度(非单一维度)。

因此,您在 c 示例中看到的是 display 函数的奇怪行为,而不是 size 函数。 size(c,3) 返回 1。这也是由于 [] 仅将前两个维度的大小设置为零,以避免在填充时使用 MxPx0 变量(c( :,:,end)=imgend 会发生什么?),它本质上是一个空变量。

关于arrays - 使用 end 增长数组时出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45978510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com