use*_*051 6 python numpy matrix sympy
我想通过计算每个索引组合的值来创建特定大小的3D矩阵.矩阵中的每个值都是符号的.
我到现在为止做了些什么:
import numpy as np
import sympy as sp
var1 = np.arange(1,10,2)
var2 = np.arange(1,10,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
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
TypeError:无法将表达式转换为float
据我所知,这是由于结合了numpy和sympy.因此,我试过:
myMatrix = sp.MatrixSymbol('temp', len(var1), len(var2), len(var3))
Run Code Online (Sandbox Code Playgroud)
代替:
myMatrix = np.zeros(shape = (len(var1), len(var2), len(var3)))
Run Code Online (Sandbox Code Playgroud)
并得到一个错误:
TypeError:new()只需4个参数(给定5个)
总而言之,我的问题是:如何创建一个包含内部任何变量的3D矩阵,以便能够在嵌套循环中使用它,这涉及符号计算?
(这是我在这个社区的第一篇文章,所以如果我做错了,请告诉我.)
正如您所建议的,您得到的第一个错误是因为您尝试将sympy
类型对象保存到numpy
数字类型的零数组中。一种选择是使用numpy
对象数组,其工作原理如下:
import numpy as np
import sympy as sp
var1 = np.arange(1,10,2)
var2 = np.arange(1,10,2)
var3 = np.arange(20,50,5)
myMatrix = np.empty((len(var1), len(var2), 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
Run Code Online (Sandbox Code Playgroud)
尽管对于大尺寸来说,这不是太有效,也不是 numpy 应该工作的方式。对于 sympy 数组,这可能是唯一的方法,但至少在我的 sympy 版本(0.7.1.rc1)中,似乎不支持 3D 数组。为了
myMatrix = sp.zeros((len(var1), len(var2), len(var3)))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
ValueError: Matrix dimensions should be a two-element tuple of ints or a single int!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1180 次 |
最近记录: |