Матрицы подобий 6 на 4

 Алгоритм итерации блоков матрицы
 имеем две матрицы такого вида

 01 02 03 04 05 06
 07 08 09 10 11 12
 13 14 15 16 17 18
 19 20 21 22 23 24

 25 26 27 28 29 30
 31 32 33 34 35 36
 37 38 39 40 41 42
 43 44 45 46 47 48

 нужно найти тысячу новых комбинаций  из блоков
 перемешивая в них возможные блоки 2 на 2

 пример  пар блоков подобий этих матриц

 01 02    25 26
 07 08    31 32

 07 08     31 32
 13 14     37 38

 13 14     37 38
 19 20     43 44

  02 03    26 27
  08 09    32 33

  08 09    32 33
  14 15    38 39

  14 15    38 39
  20 21    44 45

  и так далее  итерируя все строки и столбцы исходных матриц


 
  пример кода  на Питоне -

import numpy as np
import random

# Исходные матрицы
matrix1 = np.array([[1, 2, 3, 4, 5, 6],
                [7, 8, 9, 10, 11, 12],
                [13, 14, 15, 16, 17, 18],
                [19, 20, 21, 22, 23, 24]])

matrix2 = np.array([[25, 26, 27, 28, 29, 30],
                [31, 32, 33, 34, 35, 36],
                [37, 38, 39, 40, 41, 42],
                [43, 44, 45, 46, 47, 48]])

# Функция для создания одной новой матрицы
def create_new_matrix(m1, m2):
    new_matrix = np.zeros((6, 4), dtype=int)
    for i in range(0, 6, 2):
        block1 = m1[random.randint(0, 3):random.randint(0, 3)+2, random.randint(0, 5):random.randint(0, 5)+2]
        block2 = m2[random.randint(0, 3):random.randint(0, 3)+2, random.randint(0, 5):random.randint(0, 5)+2]
        new_matrix[i:i+2, :] = np.hstack((block1, block2))
    return new_matrix

# Создаем тысячу новых матриц
new_matrices = [create_new_matrix(matrix1, matrix2) for _ in range(1000)]

# Выводим первые 5 новых матриц для примера
for i in range(5):
    print(f"Матрица {i+1}:\n{new_matrices[i]}\n")


  Этот код создает новые матрицы, выбирая случайные блоки 2 на 2 из каждой исходной матрицы и объединяя их в одну матрицу размером 6 на 4. Вы можете изменить этот код, чтобы он соответствовал вашим конкретным требованиям и предпочтениям. Помните, что для получения различных комбинаций при каждом запуске программы, используется генерация случайных чисел.


ошибка  полученного кода -

Traceback (most recent call last):
File "C:\Users\MSI\Desktop\матрицы 6 на 4 итер.py", line 25, in <module>
new_matrices = [create_new_matrix(matrix1, matrix2) for _ in range(1000)]
File "C:\Users\MSI\Desktop\матрицы 6 на 4 итер.py", line 25, in <listcomp>
new_matrices = [create_new_matrix(matrix1, matrix2) for _ in range(1000)]
File "C:\Users\MSI\Desktop\матрицы 6 на 4 итер.py", line 21, in create_new_matrix
new_matrix[i:i+2, :] = np.hstack((block1, block2))
File "<array_function internals>", line 200, in hstack
File line 370, in hstack
return _nx.concatenate(arrs, 1, dtype=dtype, casting=casting)
File "<array_function internals>", line 200, in concatenate
ValueError: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 0, the array at index 0 has size 1 and the array at index 1 has size 4


Ошибка, с которой вы столкнулись, указывает на то, что при попытке объединить два блока с помощью функции np.hstack, размеры блоков не совпадают по одной из осей. В вашем случае, один из блоков имеет размер в одну строку, а другой — в четыре строки, что не позволяет их корректно объединить.

Чтобы исправить эту проблему, убедитесь, что выбираемые блоки всегда имеют размер 2 на 2. Вот исправленный вариант функции create_new_matrix:



- Нужно  заменить в коде модуль генерации новой матрицы


def create_new_matrix(m1, m2):
    new_matrix = np.zeros((6, 4), dtype=int)
    for i in range(0, 6, 2):
        # Убедимся, что индексы не выходят за пределы матрицы
        row1, col1 = random.randint(0, 2), random.randint(0, 4)
        row2, col2 = random.randint(0, 2), random.randint(0, 4)
        block1 = m1[row1:row1+2, col1:col1+2]
        block2 = m2[row2:row2+2, col2:col2+2]
        new_matrix[i:i+2, :] = np.hstack((block1, block2))
    return new_matrix

 

Этот код гарантирует, что блоки всегда будут размером 2 на 2, и их можно будет без проблем объединять горизонтально. Попробуйте использовать этот исправленный код, и он должен работать без ошибок.



- новый вариант кода генерации матриц нового поколения


import numpy as np
import random

# Исходные матрицы
matrix1 = np.array([[1, 2, 3, 4, 5, 6],
                [7, 8, 9, 10, 11, 12],
                [13, 14, 15, 16, 17, 18],
                [19, 20, 21, 22, 23, 24]])

matrix2 = np.array([[25, 26, 27, 28, 29, 30],
                [31, 32, 33, 34, 35, 36],
                [37, 38, 39, 40, 41, 42],
                [43, 44, 45, 46, 47, 48]])

def create_new_matrix(m1, m2):
    new_matrix = np.zeros((6, 4), dtype=int)
    for i in range(0, 6, 2):

        # Убедимся, что индексы не выходят за пределы матрицы
        row1, col1 = random.randint(0, 2), random.randint(0, 4)
        row2, col2 = random.randint(0, 2), random.randint(0, 4)
        block1 = m1[row1:row1+2, col1:col1+2]
        block2 = m2[row2:row2+2, col2:col2+2]
        new_matrix[i:i+2, :] = np.hstack((block1, block2))
    return new_matrix


# Создаем тысячу новых матриц
new_matrices = [create_new_matrix(matrix1, matrix2) for _ in range(1000)]

# Выводим первые 30 новых матриц для примера
for i in range(30):
    print(f"Матрица {i+1}:\n{new_matrices[i]}\n")




- Вывод данных новых матриц полученных на основе этого алгоритма


Python 3.9.6
C:\Users\MSI\Desktop\матрицы 6 на 4 итер.py


Матрица 1:
[[17 18 27 28]
 [23 24 33 34]
 [11 12 38 39]
 [17 18 44 45]
 [ 1  2 38 39]
 [ 7  8 44 45]]

Матрица 2:
[[ 1  2 28 29]
 [ 7  8 34 35]
 [10 11 39 40]
 [16 17 45 46]
 [16 17 25 26]
 [22 23 31 32]]

Матрица 3:
[[10 11 40 41]
 [16 17 46 47]
 [15 16 25 26]
 [21 22 31 32]
 [ 5  6 39 40]
 [11 12 45 46]]

Матрица 4:
[[ 8  9 35 36]
 [14 15 41 42]
 [ 1  2 26 27]
 [ 7  8 32 33]
 [13 14 40 41]
 [19 20 46 47]]

Матрица 5:
[[13 14 38 39]
 [19 20 44 45]
 [16 17 27 28]
 [22 23 33 34]
 [11 12 41 42]
 [17 18 47 48]]

Матрица 6:
[[ 9 10 25 26]
 [15 16 31 32]
 [16 17 33 34]
 [22 23 39 40]
 [13 14 34 35]
 [19 20 40 41]]

Матрица 7:
[[14 15 26 27]
 [20 21 32 33]
 [ 8  9 31 32]
 [14 15 37 38]
 [17 18 28 29]
 [23 24 34 35]]

Матрица 8:
[[ 3  4 38 39]
 [ 9 10 44 45]
 [11 12 29 30]
 [17 18 35 36]
 [ 4  5 38 39]
 [10 11 44 45]]

Матрица 9:
[[ 1  2 40 41]
 [ 7  8 46 47]
 [ 8  9 28 29]
 [14 15 34 35]
 [14 15 35 36]
 [20 21 41 42]]

Матрица 10:
[[ 7  8 34 35]
 [13 14 40 41]
 [17 18 25 26]
 [23 24 31 32]
 [ 4  5 26 27]
 [10 11 32 33]]

Матрица 11:
[[ 2  3 38 39]
 [ 8  9 44 45]
 [ 1  2 28 29]
 [ 7  8 34 35]
 [ 7  8 40 41]
 [13 14 46 47]]

Матрица 12:
[[ 8  9 38 39]
 [14 15 44 45]
 [15 16 29 30]
 [21 22 35 36]
 [14 15 40 41]
 [20 21 46 47]]

Матрица 13:
[[ 8  9 25 26]
 [14 15 31 32]
 [ 2  3 27 28]
 [ 8  9 33 34]
 [10 11 31 32]
 [16 17 37 38]]

Матрица 14:
[[ 2  3 40 41]
 [ 8  9 46 47]
 [13 14 33 34]
 [19 20 39 40]
 [17 18 32 33]
 [23 24 38 39]]

Матрица 15:
[[10 11 38 39]
 [16 17 44 45]
 [ 3  4 26 27]
 [ 9 10 32 33]
 [ 9 10 38 39]
 [15 16 44 45]]

Матрица 16:
[[ 3  4 29 30]
 [ 9 10 35 36]
 [13 14 34 35]
 [19 20 40 41]
 [ 1  2 38 39]
 [ 7  8 44 45]]

Матрица 17:
[[ 1  2 39 40]
 [ 7  8 45 46]
 [ 8  9 38 39]
 [14 15 44 45]
 [14 15 33 34]
 [20 21 39 40]]

Матрица 18:
[[ 5  6 25 26]
 [11 12 31 32]
 [13 14 37 38]
 [19 20 43 44]
 [16 17 37 38]
 [22 23 43 44]]

Матрица 19:
[[16 17 35 36]
 [22 23 41 42]
 [10 11 40 41]
 [16 17 46 47]
 [17 18 27 28]
 [23 24 33 34]]

Матрица 20:
[[ 2  3 28 29]
 [ 8  9 34 35]
 [ 3  4 32 33]
 [ 9 10 38 39]
 [13 14 27 28]
 [19 20 33 34]]

Матрица 21:
[[ 4  5 33 34]
 [10 11 39 40]
 [13 14 28 29]
 [19 20 34 35]
 [ 7  8 32 33]
 [13 14 38 39]]

Матрица 22:
[[11 12 28 29]
 [17 18 34 35]
 [17 18 40 41]
 [23 24 46 47]
 [ 3  4 25 26]
 [ 9 10 31 32]]

Матрица 23:
[[ 2  3 40 41]
 [ 8  9 46 47]
 [ 4  5 35 36]
 [10 11 41 42]
 [14 15 35 36]
 [20 21 41 42]]

Матрица 24:
[[11 12 27 28]
 [17 18 33 34]
 [16 17 32 33]
 [22 23 38 39]
 [ 7  8 29 30]
 [13 14 35 36]]

Матрица 25:
[[ 8  9 28 29]
 [14 15 34 35]
 [14 15 37 38]
 [20 21 43 44]
 [17 18 41 42]
 [23 24 47 48]]

Матрица 26:
[[ 1  2 37 38]
 [ 7  8 43 44]
 [14 15 41 42]
 [20 21 47 48]
 [ 7  8 35 36]
 [13 14 41 42]]

Матрица 27:
[[ 7  8 41 42]
 [13 14 47 48]
 [ 1  2 26 27]
 [ 7  8 32 33]
 [ 7  8 35 36]
 [13 14 41 42]]

Матрица 28:
[[16 17 39 40]
 [22 23 45 46]
 [ 8  9 29 30]
 [14 15 35 36]
 [ 9 10 28 29]
 [15 16 34 35]]

Матрица 29:
[[17 18 34 35]
 [23 24 40 41]
 [13 14 38 39]
 [19 20 44 45]
 [13 14 34 35]
 [19 20 40 41]]

Матрица 30:
[[11 12 31 32]
 [17 18 37 38]
 [17 18 40 41]
 [23 24 46 47]
 [ 9 10 35 36]
 [15 16 41 42]]

>>>



  Вот этим по сути  и занимается модель  GPT -
она  тасует блоки матриц вложения и делает из них новые алгоритмы
на основе новых рекомбинаций ( токенизации )
подобий похожих модулей кода ..

Мы тоже можем это делать - но перебрать такое количество комбинаций
наш мозг очевидно не в состоянии
Поэтому он решает многие задачи в своём более упрощённом виде.
И обычно ему этого хватает.
Нам нужно лучше понять что делают нейроны
когда ресурсов мозга не хватает по каким то причинам.

Эти алгоритмы буквально похожи на карусели сознаний связанных множеств -
которые могут перемолоть любые базы данных матриц в пыль
и таким образом собрать из них что то совершенно новое ..


Рецензии