gpt4 book ai didi

python - 使用 numpy 数组的 sympy 数字

转载 作者:行者123 更新时间:2023-11-28 20:38:32 25 4
gpt4 key购买 nike

在处理符号表达式数组时,是否建议使用 numpy 数组?

有点像

u0=numpy.array([Number(1.0), Number(1.0), Number(1.0)])

我的意思是,使用 numpy 数组而不是 python 列表是否更快?

如果是这样,某些对 numpy 数组的操作似乎会自动转换为浮点符号表达式,例如:

u0=np.array([数字(1.0), 数字(1.0), 数字(1.0)])
u = np.zeros((10, 3))
u[0] = u0

现在type(u0[0]) >> sympy.core.numbers.Float ,

类型(u[0][0]) >> numpy.float64

如何避免 numpy 将复制的符号表达式转换为 float64?

最佳答案

我怀疑与列表相比速度差异很大,因为在 NumPy 数组中使用任何非 NumPy 数据类型(即任何 SymPy 数据类型)都会导致 dtype=object,这意味着数组只是一个指针数组( list 也是)。

真的不清楚为什么要使用 NumPy 数组?

第一个问题是,你为什么不想使用float64?假设你正在使用

  • 符号表达式(例如x**2pi),
  • 有理数,或
  • sympy.Float 精度更高的对象

这些是我能想到的让您更喜欢 SymPy 类型而不是 NumPy 类型的唯一原因。

使用 NumPy 数组的主要优势在于,如果您想利用 NumPy 的高级索引语法。正如 Stelios 指出的那样,您可以通过使用 SymPy 的 tensor 获得其中的大部分内容。模块。这确实是使用它们的唯一原因,您必须小心并注意哪些 NumPy 方法/函数可以工作,哪些不能。

原因是任何 NumPy 数学函数都不起作用(或者最多先将数组转换为 float64)。原因是 NumPy 函数旨在处理 NumPy 数据类型。他们不知道上述数据类型。要获得精确值(符号表达式或有理数)或更高精度的浮点值(对于 sympy.Float 的情况),您需要使用 SymPy 函数,这些函数不适用于 NumPy 数组。

如果另一方面(同样,不清楚你到底想做什么),你想在 SymPy 中进行计算,然后使用 NumPy 函数对表达式进行数值计算,你应该使用 SymPy 来创建你的表达式,然后 lambdify(如果性能成为问题,则为 ufuncify)将表达式转换为等效的 NumPy 函数,该函数可以对 NumPy dtypes 的 NumPy 数组进行操作。

关于python - 使用 numpy 数组的 sympy 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com