我想通过计算每个索引组合的值来创建特定大小的3D矩阵.矩阵中的每个值都是符号的.
我到现在为止做了些什么:
import numpy as np
import sympy as sp
var1 = np.arange(1,10,2)
var2 = np.arange(1,2)
var3 = np.arange(20,50,5)
myMatrix = np.zeros(shape = (len(var1),len(var2),len(var3)))
t = sp.symbols('t')
for ii in range(len(var1)):
for jj in range(len(var2)):
for kk in range(len(var3)):
myMatrix[ii][jj][kk] = var1[ii] * var2[jj] * var3[kk] * t
这给了我错误:
TypeError: can’t convert expression to float
据我所知,这是由于结合了numpy和sympy.因此,我试过:
myMatrix = sp.MatrixSymbol('temp',len(var1),len(var3))
代替:
myMatrix = np.zeros(shape = (len(var1),len(var3)))
TypeError: new() takes exactly 4 arguments (5 given)
总而言之,我的问题是:如何创建一个包含内部任何变量的3D矩阵,以便能够在嵌套循环中使用它,这涉及符号计算?
最佳答案
你得到的第一个错误是,因为你试图将一个sympy类型对象保存到一个类型为number的numpy零数组中.一种选择是使用numpy对象数组,其工作方式如下,
import numpy as np
import sympy as sp
var1 = np.arange(1,5)
myMatrix = np.empty((len(var1),len(var3)),dtype=object)
t = sp.symbols('t')
for ii in range(len(var1)):
for jj in range(len(var2)):
for kk in range(len(var3)):
myMatrix[ii][jj][kk] = var1[ii] * var2[jj] * var3[kk] * t
虽然对于大尺寸,这不是太有效,而不是numpy应该工作的方式.对于sympy数组,这可能是唯一的方法,但似乎至少在我的sympy版本(0.7.1.rc1)中,不支持3D数组.对于
myMatrix = sp.zeros((len(var1),len(var3)))
我收到以下错误
ValueError: Matrix dimensions should be a two-element tuple of ints or a single int!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。