【问题标题】:Math library and arrays in PythonPython中的数学库和数组
【发布时间】:2017-10-05 19:02:38
【问题描述】:

我将使用数学库对数组进行一些计算。
我试过这样的事情:

import numpy as np
import math
a = np.array([0, 1, 2, 3])
a1 = np.vectorize(a)
print("sin(a) = \n", math.sin(a1)) 

不幸的是,它不起作用。发生错误:"TypeError: must be real number, not vectorize"

如何使用 vectorize 函数来计算这类东西?

【问题讨论】:

  • 我不确定您要做什么。据我所知,vectorize 期望您传递一个函数,但您传递了一个数组。 math.sin 当然希望你传递一个数字,但你传递了一个 vectorized(本质上是一个函数)。你到底想完成什么?
  • 再次阅读numpy的文档,仔细!您可能只想要np.sin(a)(无需导入数学;无需混合这些,尤其是无需使用矢量化)。
  • 你为什么需要使用数学?
  • 如果要避免np.sin,规范的方法是定义f=np.vectorize(math.sin) 并应用f(a)
  • 听起来像个垃圾作业

标签: python arrays numpy math vectorization


【解决方案1】:

numpy 的全部意义在于您不需要任何 math 方法或任何列表理解:

>>> import numpy as np
>>> a = np.array([0, 1, 2, 3])
>>> a + 1
array([1, 2, 3, 4])
>>> np.sin(a)
array([ 0.        ,  0.84147098,  0.90929743,  0.14112001])
>>> a ** 2
array([0, 1, 4, 9])
>>> np.exp(a)
array([  1.        ,   2.71828183,   7.3890561 ,  20.08553692])

您可以像使用标量一样使用a,并获得相应的数组。

如果你真的需要使用math.sin(提示:你不需要),你可以vectorize它(函数本身,而不是数组):

>>> vsin = np.vectorize(math.sin)
>>> vsin(a)
array([ 0.        ,  0.84147098,  0.90929743,  0.14112001])

【讨论】:

    【解决方案2】:
    import numpy as np
    import math
    a = np.array([0, 1, 2, 3])
    print("sin(a) = \n", [math.sin(x) for x in a])
    

    math.sin 一次需要一个实数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多