2016-11-30 410 views
-1

在matlab中將矩陣行數減半的最佳方法是什麼?如何在matlab中將矩陣的行數減半?

下面的命令在做什麼?

mymatrix = mymatrix(1:2:end,:); 

有沒有更好的方法可用?

+0

這可能是最簡單的方法,是的。 – Suever

+0

@Suever,這個命令實際上在做什麼? – anonymous

+0

你給的命令是保存每隔一行,從第一行開始。所以它會丟掉之間的行。 「最佳」方式取決於丟棄信息具有的價值或角色:這是您想縮小的圖像嗎?如果是這樣,最好在丟棄行之前插入像素值。還有很多其他的方法可以減少行數(例如只取上半部分),所以「最好」的定義是不明確的,直到我們在上下文中知道你想達到的目標爲止。 – jez

回答

1

簡短的回答這是矩陣mymatrix的第二行從第一個(所有奇數行)開始,是的這可能是最簡單的方法。 添加澄清基於評論從@Sardar_Usama

較長版本

end是MATLAB內部命令指的是在給定尺寸的陣列的端部。大致相當於size(var,dim)

所以實際上mymatrix(1:2:end,:)可以重寫爲mymatrix(1:2:size(mymatrix,1),:)。現在,如果你真的看到1:2:size(mymatrix,1)這些是你正在選擇的行。 1, 3, 5, etc。您實際上可以指定您想要的任何行,下面是一些示例。

1:floor(end/2); % first 'half' 
floor(end/2)+1:end; % second 'half' 
1:3:end; % every third element 
1:2:floor(end/2); % every second element in the first 'half' 

添加了floor()以避免奇數長度的問題。在這種情況下,「一半」不完全是一半,而是大致一半。或者ceil()取決於你想如何定義奇數長度的一半。

+0

爲什麼我不計算行數n,然後選擇第n/2行? – anonymous

+0

正確答案是:**除了每秒鐘以外的所有行** –

+0

'結束+ 1:結束;'不是下半部分。 '1:end/2;'可能會產生警告,因爲'end/2'可能不是一個整數 –