2016-05-27 3 views
2

У меня есть массив значений 10 x 10, A. Мне нужно медиана, M, всех этих значений. Я могу найти медианы вдоль строк или вдоль столбцов легко:Медиана БОЛЬШОГО многомерного массива (не только одного измерения) в MATLAB

M = median(A,1) %or 
M = median(A,2) 

Однако M = median(A) также возвращает медианы вдоль строк.

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

Спасибо!

+2

Преобразование матрицы в один вектор является одной из самых быстрых ** операций, которые вы можете выполнять в MATLAB. Помните, что память в MATLAB организована в основном порядке столбца, и поэтому на самом деле использование индексов доступа с несколькими измерениями для получения правильной ячейки памяти является синтаксическим сахаром для многомерного доступа к элементу с одним индексом. Предложение Луиса ниже, чтобы развернуть матрицу в длинный вектор и выполнить медианную ... вы не можете получить ее быстрее. – rayryeng

+1

Отлично! Я переоценил трудоемкость преобразования. Благодаря! – Takver

+0

Примите ответ от Луиса, чтобы сообщество узнало, что вам больше не нужна помощь. – rayryeng

ответ

5

Первый линеаризовать путем индексирования (:). Это преобразует любой массив в массив столбцов. Затем вычислить медиану:

M = median(A(:)); 

Я не думаю, что индексация с (:) нуждается в каком-либо перераспределении памяти. Он просто считывает массив в порядке column-major.

+1

На самом деле нет другого ответа, кроме этого. +1. – rayryeng

Смежные вопросы