[英]Matlab: Find minimum value from a set of values for each column in an array
[英]How to find minimum of each column in MATLAB and sum op all elements of that column?
我有一個 300x178 矩陣,我想找到該矩陣每一列的最小值,即得到一個 1x178 數組。 然后我想將 300x178 矩陣中每列中除最小值之外的所有元素的總和存儲在最小值的位置/像素上,將所有其他元素保留為零。 我如何使用 MATLAB 執行此操作?
例子:
1 4 6 3
2 6 7 4
5 1 5 7
變成:
1 0 0 1
0 0 0 0
0 1 1 0
最終:
8 0 0 14
0 0 0 0
0 11 18 0
您的示例和標題與問題文本不對應。 您的示例對一列中的所有值求和並將它們存儲在最小值的位置,標題也要求這樣做。 您可以通過巧妙地使用sub2ind
來做到這一點:
A = [1 4 6 3
2 6 7 4
5 1 5 7];
C = zeros(size(A));
[tmp, idx] = min(A); % find the locations of minima
% one liner to store the sum of columns
C(sub2ind(size(A), idx, 1:size(A,2))) = sum(A,1);
C =
8 0 0 14
0 0 0 0
0 11 18 0
如果,另一方面,你是在問你的問題文本之后,隨后使用相同的sub2ind
技巧在最小位置上減去A
:
C(sub2ind(size(A), idx, 1:size(A,2))) = C(sub2ind(size(A), idx, 1:size(A,2))) - A(sub2ind(size(A), idx, 1:size(A,2)))
C =
7 0 0 11
0 0 0 0
0 10 13 0
這樣你就可以得到除最小值以外的所有元素的總和。
要深入解釋sub2ind
的作用,請閱讀Luis Mendo 撰寫的精彩 Q/A ,請記住,在A(2,3)
中, 2
和3
稱為下標,在 3×4 矩陣的情況下, 轉化為線性指數8
。
我無法在我的 R2007b 上對此進行測試,但根據min
上的文檔,您可以使用[M, I] = min(A, [], 1, 'linear')
直接將線性索引放入I
,而無需通過sub2ind
:
C = zeros(size(A));
[tmp, idx] = min(A, [], 1, 'linear');
C(idx) = sum(A, 1);
% Optional, to sum all but the minimum
C(idx) = C(idx) - A(idx);
文檔中關於原始矩陣中出現多個相同值最小值的小注釋:
如果最小元素出現不止一次,則 I 包含該值第一次出現的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.