Избегание циклов for в этой матричной операции Matlab - PullRequest
0 голосов
/ 21 июля 2011

У меня большая 4-мерная матрица, и я хочу 1) найти минимум 2 из этих измерений (т.е. результат 4000x4000), а затем 2) подсчитать количество элементов в этих двух последних измерениях, которые меньше чем ( допустим) в 5 раз меньше минимума (т.е. дает результат 4000x4000). Я немного озадачен тем, как это сделать, не возвращаясь к циклам for

Некоторый код может помочь моему описанию:

A      = rand([4000,4000,7,7]);
B(:,:) = min(A(:,:,1:7;1:7)); % this isn't quite right?
C      = size( A < 5*B ) % obviously totally wrong

любые указатели были бы великолепны - большое спасибо!

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Если я правильно понял, следующее должно сделать работу:

mn = min(min(A,[],3),[],4);
num = sum(sum(bsxfun(@lt, A, 5*mn),3),4)
0 голосов
/ 21 июля 2011

Во-первых, это должно быть rand([4000,4000,7,7])

Во-вторых, чтобы использовать min, вы должны сделать что-то вроде min(A, [], 1) (замените 1 на размерность)

В-третьих, предполагая, что у вас былоA и B, вы хотите C = sum(sum(A < 5*B))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...