簡體   English   中英

使用end來增長數組時出現意外行為

[英]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)=imgend會發生什么?),本質上是一個空變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM