2016-02-04 5 views
3

Моя цель - создать случайный массив из целых чисел по 20 на 5, отсортировать их по порядку сверху вниз и слева направо, а затем вычислить среднее значение в каждой из 20 строк. Это дает мне массив размером от 1 до 20. Затем я должен найти столбец, средний ближе к 0. Вот мой код до сих пор:MATLAB Extracting Column Number

RandomArray= randi([-100 100],20,5); 
NewArray=reshape(sort(RandomArray(:)),20,5); 
MeanArray= mean(transpose(NewArray(:,:))) 
X=min(abs(x-0)) 

Как я могу сохранить номер столбца, чей средний ближе к 0 в переменную? Я всего лишь месяц в кодировании, поэтому это, вероятно, кажется очень простой проблемой. Спасибо

+0

Взгляните в документации на втором выходе 'min' функции это дает индекс. минимум, а не значение. – Dan

ответ

1

Ты почти там. Все, что вам нужно, это find:

RandomArray= randi([-100 100],20,5); 
NewArray=reshape(sort(RandomArray(:)),20,5); 
% MeanArray= mean(transpose(NewArray(:,:))) %// gives means per row, not column 
ColNum = find(abs(mean(NewArray,1))==min(abs(mean(NewArray,1)))); %// gives you the column number of the minimum 
MeanColumn = RandomArray(:,ColNum); 

find даст вам индекс записи, где abs(mean(NewArray)), то есть абсолютные значения средней на колонке равна минимум того же массива, таким образом, индекс, где среднее колонка ближе всего к 0.

Обратите внимание, что вам не нужно ваша MeanArray, как он переставляет (который может быть сделано путем NewArray.', а затем дает среднее значение для каждого столбца, т.е. старых строк. Я бросил все в find заявления.

Как указывается в comment by Matthias W. это быстрее, чтобы использовать второй выход min непосредственно вместо find:

RandomArray= randi([-100 100],20,5); 
NewArray=reshape(sort(RandomArray(:)),20,5); 
% MeanArray= mean(transpose(NewArray(:,:))) %// gives means per row, not column 
[~,ColNum] = min(abs(mean(NewArray,1))); 
MeanColumn = RandomArray(:,ColNum); 
+5

'min' также может возвращать индекс столбца (не нужно' find');) - '[MinVal, ColNum] = min (abs (mean (NewArray, 1)))' –