Связанные , но очень разные.
В приведенных ниже примерах, A
и B
будет 2-на-2 матрицы, и матрицы являются одним индексированные.
Кронекера продукт имеет следующие свойства:
A⊗B = A(1,1)*B A(1,2)*B
A(2,1)*B A(2,2)*B
= A(1,1)*B(1,1) A(1,1)*B(1,2) A(1,2)*B(1,1) A(1,2)*B(1,2)
A(1,1)*B(2,1) A(1,1)*B(2,2) A(1,2)*B(2,1) A(1,2)*B(2,2)
A(2,1)*B(1,1) A(2,1)*B(1,2) A(2,2)*B(1,1) A(2,2)*B(1,2)
A(2,2)*B(2,1) A(2,2)*B(1,2) A(2,2)*B(2,1) A(2,2)*B(2,2)
Задача: учитывая две матрицы A
и B
вернуть A⊗B
.
- Размер матриц будет как минимум
1-by-1
. Максимальный размер будет тем, что ваш компьютер / язык может обрабатывать по умолчанию, но минимальный5-by-5
ввод. - Все входные значения будут неотрицательными целыми числами
- Встроенные функции, которые вычисляют продукты Kronecker или продукты Tensor / Outer , не допускаются
- В целом: стандартные правила, касающиеся формата ввода / вывода, программы и функций, лазеек и т. Д.
Тестовые случаи:
A =
1 2
3 4
B =
5 6
7 8
A⊗B =
5 6 10 12
7 8 14 16
15 18 20 24
21 24 28 32
B⊗A =
5 10 6 12
15 20 18 24
7 14 8 16
21 28 24 32
------------------------
A =
1
2
B =
1 2
A⊗B =
1 2
2 4
------------------------
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
B =
1 1
0 1
A⊗B =
16 16 2 2 3 3 13 13
0 16 0 2 0 3 0 13
5 5 11 11 10 10 8 8
0 5 0 11 0 10 0 8
9 9 7 7 6 6 12 12
0 9 0 7 0 6 0 12
4 4 14 14 15 15 1 1
0 4 0 14 0 15 0 1
B⊗A =
16 2 3 13 16 2 3 13
5 11 10 8 5 11 10 8
9 7 6 12 9 7 6 12
4 14 15 1 4 14 15 1
0 0 0 0 16 2 3 13
0 0 0 0 5 11 10 8
0 0 0 0 9 7 6 12
0 0 0 0 4 14 15 1
------------------------
A = 2
B = 5
A⊗B = 10
code-golf
math
linear-algebra
matrix
Стьюи Гриффин
источник
источник
;/
можноẎ
сейчас. (особенность постдатсовой задачи?)CJam, 13 байтов
Это неназванный блок, который ожидает две матрицы сверху стека и оставляет их продукт Kronecker на их месте.
Тестирование.
объяснение
Это просто часть продукта Kronecker из предыдущего ответа , поэтому я здесь просто воспроизводлю соответствующие части предыдущего объяснения:
Вот краткий обзор инфиксных операторов CJam для работы со списками:
f
ожидает список и что-то еще в стеке и отображает следующий двоичный оператор над списком, передавая другой элемент в качестве второго аргумента. Например,[1 2 3] 2 f*
и то, и2 [1 2 3] f*
другое дают[2 4 6]
. Если оба элемента являются списками, первый сопоставляется, а второй используется для карри бинарного оператора.:
имеет два применения: если следующий за ним оператор унарный, это простая карта. Например ,[1 0 -1 4 -3] :z
это[1 0 1 4 3]
, гдеz
получает модуль числа. Если оператор, следующий за ним, является бинарным, он будет сбрасывать оператор. Например,[1 2 3 4] :+
есть10
..
векторизует бинарный оператор. Он ожидает два списка в качестве аргументов и применяет оператор к соответствующим парам. Например[1 2 3] [5 7 11] .*
дает[5 14 33]
.источник
MATLAB / Octave,
8342 байтаСохранено 41 байт, благодаря FryAmTheEggman!
Проверьте это здесь!
Сломать
arrayfun
является замаскированным циклом for, который умножаетсяn*B
для переменной,n
определенной вторым аргументом. Это работает, потому что цикл по 2D-матрице такой же, как цикл по вектору. Т.е. такfor x = A
же, какfor x = A(:)
.'un',0
эквивалентно более многословному'UniformOutput', False
и указывает, что выходные данные содержат ячейки вместо скаляров.cell2mat
используется для преобразования ячеек обратно в числовую матрицу, которая затем выводится.источник
arrayfun
петли линейно , как вы говорите, как если бы матрица была вектором, ноfor
делаете не (она перебирает столбцы массива)Pyth,
141211 байтовПеревод ответа Jelly , который основан на алгоритме Бюттнера (
ü
произносится при попытке сделатьee
звук [как при встрече] в формеoo
звука звука [как при загрузке]).Попробуйте онлайн (тестовый пример 1)!
Бонус: рассчитать столько
B⊗A
же байтовПопробуйте онлайн (тестовый пример 1)!
источник
Юлия,
403937 байтПопробуйте онлайн!
Как это работает
Для матриц A и B ,
map(a->a*B,A')
вычисляет произведение Кронекера A⊗B .Результат является вектором матричных блоков с размерами B .
Мы должны транспонировать A (с
'
), так как матрицы хранятся в главном порядке столбцов.sum(A^0)
вычисляет сумму всех элементов матрицы идентичности А размеров «s. Для матрицы A n × n это дает n .С первым аргументом п ,
hvcat
сцепляет п матричных блоков по горизонтали, и в результате (больше) блоков по вертикали.источник
J, 10 байт
Это одна из возможных реализаций.
J 13 байт
Это аналогичная реализация, но вместо этого используется способность J определять ранги. Это применяется
*
между каждым элементом в LHS со всей RHS.использование
источник
JavaScript (ES6), 79
Простая реализация с вложенным циклом
Тест
источник