В моем коде есть две большие матрицы, которые имеют одинаковое количество столбцов и различное количество строк. Как A(20000X4000)
и B(30000X4000)
. Оба равны 0-1.Как избежать большого умножения матрицы в Matlab
Я должен проверить каждую строку A со всеми строками B и подсчитать количество общих 1s. Например, если A(1,:)=[0 1 0 1 1]
и B([1 2],:)=[1 1 1 1 1;0 0 0 1 1]
, мне нужно получить результат как 3
и 2
.
Предположим, что существует большая 0-1 матрица C(50000X4000)
, а ее строки обозначаются либо как тип A
, либо тип B
. Я должен сравнить все строки A
и B
вместе и перечислить 1s. Если число 1s в каждой строке A и B больше, чем некоторые оценки, то я использовал эти строки A и B для остальной части расчета. Таким образом, мне даже не нужно хранить A
и B
, все, что мне нужно, это список пар индексов строк. Что-то вроде [(3,2),(3,5),...]
, которое показывает, что я должен использовать третий ряд A
и второй ряд B
, также третий из A
и пятый из B
и так далее.
Первое, что пришло мне в голову, было A*B'
, оно дает правильный результат, но практически это очень дорого и в некоторых случаях невозможно сделать это умножение.
Я преобразовал матрицы в один тип данных, и он стал немного быстрее. Редкий не помог.
Задача кажется простой, просто подсчитывая общие 1s каждой строки A
и все строки B
, но не так просто реализовать. Учитывая, что код должен выполнять эту задачу как 1000 раз, тогда это практически невозможно.
Любая идея, как сделать перечисление общих без умножения? (Кстати, петли тоже не помогли).
Спасибо.
Насколько разрежены матрицы, т.е. примерно столько же? –
В общем, нельзя улучшить на 'A * B''. И даже переход на C++, скорее всего, не даст значительного улучшения. Таким образом, единственная надежда, которую вы можете иметь, состоит в том, чтобы 1. Решить проблему по-другому или использовать более полезную информацию. Тот факт, что это логическая матрица, является такой информацией, но, к сожалению, ее недостаточно. Вы можете спросить себя, насколько разрежены матрицы, есть ли у них определенная структура? Насколько разрешена ваша матрица результатов? –
в любом случае, результатом будет матрица 20000 x 30000. вам действительно нужна эта матрица? что вы планируете делать с ним, когда у вас есть это? –