2016-06-08 2 views
0

Я использую MatrixToolkitsJava для проекта Neural Network для моей диссертации, и в этом мне нужно сделать матрицы весов более крупными, а позже потенциально меньшими. То, как я сейчас делаю это сейчас, создавая новую матрицу и копируя существующие значения при создании новых значений, крайне неэффективно, занимая подавляющее большинство времени. Есть ли эффективный способ добавления строк и столбцов в существующие матрицы?Создание матрицы больше

+0

Невозможно изменить размер массива, поэтому они изобрели что-то называемое списки. Возможно, вы можете создать архариста арраистов. – Gendarme

+0

Я не использую массив, я использую матрицу из MatrixToolkitsJava. Мне просто интересно, есть ли более вычислительно эффективный способ изменения размера матрицы или даже копирования значений в матрице. – Beez

ответ

0

Как указано, вы можете использовать списки, но если вы настроены на использование массива, вы можете создать метод для создания нового массива, скопировать данные и затем заменить ссылку, которую вы храните.

Если вы используете System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length), он будет достаточно быстрым, если вы не используете гигантский массив.

EDIT: Не могу поверить, что раньше не думал об этом. Просто используйте матричное умножение для копирования данных. Например, чтобы сделать 2 на 2 a 3 на 3, просто сделайте [2,2] x [(1,0), (0,1), (0,0)] = [2,3] => [ (1,0,0), (0,1,0)] x [2,3] = [3,3]

+0

Они не массивы, они являются матрицами из MTJ для требуемой вычислительно-эффективной линейной алгебры. И они становятся довольно большими, и это проблема. Они легко достигают тысяч строк/столбцов. Это то, что я делаю в настоящее время, копируя данные, которые у меня есть, и добавляю новые данные, но, как я уже сказал, он довольно неэффективен и имеет тенденцию замедлять работу. Я сомневаюсь, что arrayCopy будет работать для MTJ Matrices. – Beez

+0

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

+0

Нет, к сожалению. Цель здесь состоит в том, чтобы создать растущую нейронную сеть, которая, мы надеемся, найдет соответствующий размер по мере ее появления. Другая проблема, заключающаяся в том, что матрицы больше, чем они должны быть, состоит в том, что чем больше они тем больше, тем меньше программа замедляется. Поэтому, делая их чрезвычайно большими, и их заполнение приведет к более медленной программе, чем к их росту, поскольку я иду. – Beez

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