我有以下ndarray (由351个3x3矩阵堆叠而成)
tensor = np.ones((351,3,3))
b = np.ones((351,3))
应用如下函数:
np.linalg.tensorinv(tensor)
np.linalg.tensorsolve(tensor,b)
给出以下错误:“{LinAlgError}数组的最后2个维度必须是正方形”
为什么会发生这个错误?我的意思是最后两个维度是正方形(3x3)。这甚至不适用于tensor.T (它是3x3x351)。谢谢你的帮助。
发布于 2020-11-04 00:38:57
tensorinv操作定义正方形尺寸的意义有点不同寻常。tensorinv
采用参数ind
,如果直到(但不包括) ind
的索引的乘积与从ind
到最后一个索引的索引的乘积相等,即prod(tensor.shape[:ind]) == prod(tensor.shape[ind:])
,则张量为“平方”。这对于定义张量运算的逆或求解张量压缩方程很有用,但根据示例的形状,我认为这不是您想要做的。
你似乎想要解315个不同的线性方程组Ax=b,你应该只用np.linalg.solve(tensor, b)
就能做到(尽管不是用你在问题中的例子,因为你所有的张量都是一堆奇异矩阵)。重写您的示例,使tensor
更小,并且是一个标识矩阵的集合,而不是全部:
>>> temp=np.eye(3)
>>> tensor=np.repeat(temp[np.newaxis,:,:],4,axis=0)
>>> tensor.shape
(4, 3, 3)
>>> b=np.ones((4,3))
>>> b
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
>>> np.linalg.solve(tensor,b)
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
https://stackoverflow.com/questions/64664317
复制相似问题