Matrix 用sage中的标量乘以矩阵的矩阵
我已经创建了一个由2x2矩阵组成的2x2矩阵:Matrix 用sage中的标量乘以矩阵的矩阵,matrix,matrix-multiplication,sage,Matrix,Matrix Multiplication,Sage,我已经创建了一个由2x2矩阵组成的2x2矩阵: a = matrix([[matrix([[ 1, 2], [ 3, 4]]), matrix([[ 5, 6], [ 7, 8]])], [matrix([[ 9, 10], [11, 12]]), matrix([[13, 14], [15, 16]])]]) 当我将其按编号(例如键入a*3)进行倍数计算时,会出现以下错误: TypeError: unsupp
a = matrix([[matrix([[ 1, 2], [ 3, 4]]),
matrix([[ 5, 6], [ 7, 8]])],
[matrix([[ 9, 10], [11, 12]]),
matrix([[13, 14], [15, 16]])]])
当我将其按编号(例如键入a*3
)进行倍数计算时,会出现以下错误:
TypeError: unsupported operand parent(s) for '*':
'Full MatrixSpace of 2 by 2 dense matrices over Integer Ring' and
'Full MatrixSpace of 2 by 2 dense matrices over Integer Ring'
这看起来很奇怪,因为整型环上2乘2密集矩阵的完整矩阵空间是子矩阵的父矩阵(parent(a[0,0])
),我可以毫无问题地将它们相乘:
sage: a[0,0]*a[0,0]
[ 7 10]
[15 22]
以下任何命令都可以正常工作:
sage: a[0,0]*3
sage: a[0,0]*a[0,0]
sage: a[0,0]*a
sage: a*a
sage: a[0,0]*3*a
sage: diagonal_matrix([3]*2)*a # I don't want do this every time!
但这些并不是:
sage: a*3 #TypeError
sage: a[0,0]*a*3 #TypeError
以下是问题:
对角矩阵
吗你说得对,这应该行得通,但作为替代品
sage: (3 * identity_matrix(2)) * a
sage: a * (3 * identity_matrix(2))
两者都为我工作。如果您需要经常这样做:
sage: id = identity_matrix(2)
sage: 3 * id * a
您可以将其视为bug,也可以将其视为尚未实现的功能(与误导性错误消息结合)。我已经在上报告过了。我想只是缺少了一个尚未实施的特殊案例。为什么不使用numpy的多维数组呢
sage: import numpy
sage: x = numpy.arange(16)
sage: x.shape = (2,2,2,2)
sage: x
array([[[[ 0, 1],
[ 2, 3]],
[[ 4, 5],
[ 6, 7]]],
[[[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15]]]])
sage: 3*x
array([[[[ 0, 3],
[ 6, 9]],
[[12, 15],
[18, 21]]],
[[[24, 27],
[30, 33]],
[[36, 39],
[42, 45]]]])
sage: x[0,0]
array([[0, 1],
[2, 3]])
sage: x[0,0] * x[1,0]
array([[ 0, 9],
[20, 33]])
sage: x[0,0].dot(x[1,0])
array([[10, 11],
[46, 51]])
你试过把常数放在前面吗?@ChristianJonassen,是的,
3*a
和a*3