[英]Unexpected behavior while using end to grow arrays
從圖像目錄構建視頻數組時遇到意外行為。 原始代碼:
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個dims或N-dims,其中N是具有數據的最遠維度(非單一維度)。
因此,您在c
示例中看到的是顯示函數的奇怪行為,而不是size
函數。 size(c,3)
返回1
。 這也是由[]
僅將前兩個維度的大小設置為零引起的,以避免填充時出現MxPx0
變量( c(:,:,end)=img
, end
會發生什么?),本質上是一個空變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.