У меня есть два списка.
a_num = [1, 3, 2, 4]
b_num = [1, 2, 3, 4]
Я хочу найти матрицу перестановок для преобразования a
в b
. Математически матрица перестановок - это квадратная матрица, элементы которой равны 1 или 0. Она может изменить последовательность элементов в векторе, умножив ее.
В этом конкретном примере матрица перестановок имеет вид:
p = [[1,0,0,0],
[0,0,1,0],
[0,1,0,0],
[0,0,0,1]]
# check whether p is correct.
b_num == np.dot(np.array(p), np.array(a_num).reshape(4,1))
Не могли бы вы показать мне, как сделать эту матрицу p
? В моем реальном приложении в списках могут быть десятки элементов с произвольной последовательностью. И два списка всегда содержат str
вместо int
.
А как сделать p
, когда a
и b
являются списками str
?
a_str = ['c1', 'c2', 's1', 's2']
b_str = ['c1', 's1', 'c2', 's2']