如何使用带有Max函数的sympy.lambdify替代numpy.maximum而不是numpy.amax?

尤里扎别加耶夫

我正在尝试在内部使用sp.Max(x,0)来粗化大型分析表达式。我想使用numpy对向量进行矢量化处理,因此x将是一个数组。我需要x和0的逐元素最大值。不过,默认情况下,sympy将sp.Max更改为np.amax。它沿着轴找到最大值,这不是我所需要的。lambdify中的“模块”关键字无法正常运行。我试过了:

import numpy as np
import sympy as sp

arr = np.array([1, 2, 3])
expr = sp.sin(x) + sp.Max(x, 0)
f = sp.lambdify(x, expr, modules=[{'Max': np.maximum}, 'numpy'])  # docs say, priority of modules matters
help(f)

它给:

Help on function _lambdifygenerated:
_lambdifygenerated(x)
    Created with lambdify. Signature:

    func(x)

    Expression:

    sin(x) + Max(0, x)

    Source code:

    def _lambdifygenerated(x):
        return (sin(x) + amax((0,x)))


    Imported modules:

由于某种原因,sp.Max更改为amax。

如果'numpy'未包含在'modules'列表中,它将简单地跳过所有其他功能。我也尝试在列表中交换dict和'numpy',但没有帮助。请澄清一下,怎么了?它是sympy中的错误吗?

约翰·C

lambdify用于创建旨在进行矢量化的numpy函数时,通常会存在一些细微的问题,尤其是当变量(x)和常量(0)混合在一起时。

在这种情况下,sp.max假设其所有可能的许多参数都是单个值。np.amax获取一个扁平数组的最大值。np.maximum获取两个数组的按元素最大值。这里的问题是常量0不会自动扩展为numpy数组。

我的解决方法是将其替换sp.max为基于的自定义函数sp.Piecewise请注意,如果的参数超过2个,则需要一个单独的函数sp.max

import numpy as np
import sympy as sp
from sympy.abc import x

def sympy_max2(a, b):
    return sp.Piecewise((b, a < b), (a, True))

arr = np.array([11, 22, 33, -1, -2])
expr = sp.sin(x) + sympy_max2(0, x)
f = sp.lambdify(x, expr, modules=['numpy'])

print(f(arr)) # [10.00000979 21.99114869 33.99991186 -0.84147098 -0.90929743]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

numpy max vs amax vs maximum

来自分类Dev

如何获得一组 numpy 数组的 amax?

来自分类Dev

我如何获得或创建与rust的ndarray板条箱等效的numpy的amax函数?

来自分类Dev

在numpy mesgrid上评估sympy lambdify的结果

来自分类Dev

分段函数和numpy模块的sympy.lambdify错误

来自分类Dev

Python:SymPy lambdify Abs与NumPy一起使用

来自分类Dev

numpy.ndarray 的 numpy.argwhere 的替代函数是什么?

来自分类Dev

熊猫:如何为相同的结果使用Numpy函数而不是Lambda函数(因为Numpy更快)?

来自分类Dev

Julia中numpy.digitize()函数的替代方法是什么?

来自分类Dev

R的nrd0是否有scipy / numpy替代项?

来自分类Dev

Numpy级联速度很慢:是否有其他替代方法?

来自分类Dev

有比Numpy arange()更好的替代方法吗?

来自分类Dev

numpy.linalg.eigh与sym.lambdify()中的numpy数组一起使用,但不适用于np.array()

来自分类Dev

numpy.max函数有什么作用?

来自分类Dev

如何将包含erf函数的SymPy表达式与NumPy一起使用

来自分类Dev

快速替代方案,在Pandas DataFrame中的所有行上运行基于numpy的函数

来自分类Dev

TensorFlow:numpy.repeat()替代

来自分类Dev

numpy einsum的替代品

来自分类Dev

numpy einsum的替代品

来自分类Dev

有效地使用numpy.random.choice和重复的数字和替代方法

来自分类Dev

使用函数中的 numpy、sympy 创建符号矩阵?

来自分类Dev

如何使用numpy的Meshgrid函数以随机间隔而不是等距间隔的方式?

来自分类Dev

如何使用 numpy 的 pv 函数计算没有 pmt 的现值?

来自分类Dev

无需复制数组即可替代numpy roll

来自分类Dev

Python Numpy Nditer跳过替代元素

来自分类Dev

numba.njit的numpy.hstack替代

来自分类Dev

漂亮的打印和替代numpy数组

来自分类Dev

如何获得 <class 'numpy.str'> 而不是 <class 'numpy.object_'>

来自分类Dev

'numpy.ndarray' 对象如何不是 'numpy.ndarray' 对象?

Related 相关文章

  1. 1

    numpy max vs amax vs maximum

  2. 2

    如何获得一组 numpy 数组的 amax?

  3. 3

    我如何获得或创建与rust的ndarray板条箱等效的numpy的amax函数?

  4. 4

    在numpy mesgrid上评估sympy lambdify的结果

  5. 5

    分段函数和numpy模块的sympy.lambdify错误

  6. 6

    Python:SymPy lambdify Abs与NumPy一起使用

  7. 7

    numpy.ndarray 的 numpy.argwhere 的替代函数是什么?

  8. 8

    熊猫:如何为相同的结果使用Numpy函数而不是Lambda函数(因为Numpy更快)?

  9. 9

    Julia中numpy.digitize()函数的替代方法是什么?

  10. 10

    R的nrd0是否有scipy / numpy替代项?

  11. 11

    Numpy级联速度很慢:是否有其他替代方法?

  12. 12

    有比Numpy arange()更好的替代方法吗?

  13. 13

    numpy.linalg.eigh与sym.lambdify()中的numpy数组一起使用,但不适用于np.array()

  14. 14

    numpy.max函数有什么作用?

  15. 15

    如何将包含erf函数的SymPy表达式与NumPy一起使用

  16. 16

    快速替代方案,在Pandas DataFrame中的所有行上运行基于numpy的函数

  17. 17

    TensorFlow:numpy.repeat()替代

  18. 18

    numpy einsum的替代品

  19. 19

    numpy einsum的替代品

  20. 20

    有效地使用numpy.random.choice和重复的数字和替代方法

  21. 21

    使用函数中的 numpy、sympy 创建符号矩阵?

  22. 22

    如何使用numpy的Meshgrid函数以随机间隔而不是等距间隔的方式?

  23. 23

    如何使用 numpy 的 pv 函数计算没有 pmt 的现值?

  24. 24

    无需复制数组即可替代numpy roll

  25. 25

    Python Numpy Nditer跳过替代元素

  26. 26

    numba.njit的numpy.hstack替代

  27. 27

    漂亮的打印和替代numpy数组

  28. 28

    如何获得 <class 'numpy.str'> 而不是 <class 'numpy.object_'>

  29. 29

    'numpy.ndarray' 对象如何不是 'numpy.ndarray' 对象?

热门标签

归档