首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Numpy: np.linalg.tensorsolve和tensorinv错误:数组的最后2维必须是平方

Numpy: np.linalg.tensorsolve和tensorinv错误:数组的最后2维必须是平方
EN

Stack Overflow用户
提问于 2020-11-03 22:00:58
回答 1查看 124关注 0票数 1

我有以下ndarray (由351个3x3矩阵堆叠而成)

代码语言:javascript
运行
复制
tensor = np.ones((351,3,3))
b = np.ones((351,3))

应用如下函数:

代码语言:javascript
运行
复制
np.linalg.tensorinv(tensor)
np.linalg.tensorsolve(tensor,b)

给出以下错误:“{LinAlgError}数组的最后2个维度必须是正方形”

为什么会发生这个错误?我的意思是最后两个维度是正方形(3x3)。这甚至不适用于tensor.T (它是3x3x351)。谢谢你的帮助。

EN

Stack Overflow用户

回答已采纳

发布于 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更小,并且是一个标识矩阵的集合,而不是全部:

代码语言:javascript
运行
复制
>>> 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.]])
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64664317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档