C ++ Массивы сложны. Вы не можете просто бросить их и ожидать, что они будут работать, как на некоторых языках. Единственный способ инициализировать массив из другого массива - это перейти по циклу для и скопировать каждый элемент по отдельности. Это вдвойне подходит для двумерных массивов (то есть вам понадобятся два для циклов).
Кажется, вы пытаетесь сделать это более сложным, чем нужно. Например, если набор значений, которые вы будете назначать для PATTERNS, будет одинаковым при каждом запуске программы, вы можете инициализировать двумерную переменную следующим образом:
static const int foo[2][3] = {{11,12,13},{21,22,23}};
Если набор значений, назначенных для PATTERNS, варьируется от одного исполнения к другому, то вам, вероятно, следует попытаться найти другой способ решения проблемы. Я бы, вероятно, обернул данные в классе, особенно если вы собираетесь использовать двумерные массивы одинакового размера в других местах кода.