我创建了一个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: 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'
这看起来很奇怪,因为Full MatrixSpace of 2 by 2 dense matrices over Integer Ring
是子矩阵(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
以下是问题:
diagonal_matrix
作弊的情况下通过标量对矩阵进行多次复制吗?答案 0 :(得分:2)
你说得对,这是正确的,但作为替代品,
sage: (3 * identity_matrix(2)) * a
sage: a * (3 * identity_matrix(2))
都适合我。如果你需要做很多事情:
sage: id = identity_matrix(2)
sage: 3 * id * a
您可以将其视为错误,或者您可以将其视为尚未实现的功能(与误导性错误消息相结合)。我已经在Sage bug tracker上报告了它。
答案 1 :(得分:1)
我想只有一个特殊情况缺失尚未实施。为什么不从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]])