【问题标题】:Creating a function in Python which runs over a range and returns a new value to an array each time在 Python 中创建一个函数,该函数在一个范围内运行并每次向数组返回一个新值
【发布时间】:2018-09-11 15:51:39
【问题描述】:

基本上,我要创建的是一个接受数组的函数,在这种情况下:

numpy.linspace(0, 0.2, 100)

并为数组中的每个元素运行许多其他代码,最后创建一个新数组,其中每个元素的每个计算都有一个数字。一个简单的例子是函数正在做这样的乘法:

def func(x):
   y = x * 10
   return (y)

但是,我希望它能够将数组作为参数并返回一个数组,该数组由每次乘法的每个 y 组成。上面的函数适用于此,但我尝试为我的代码创建的函数不适用于此方法,而是只返回一个值。还有另一种方法可以使功能按预期工作吗?感谢您的帮助!

【问题讨论】:

  • 您能解释一下“为每个元素的每个计算创建一个包含一个数字的新数组”是什么意思吗?
  • 我的意思是,在我的示例中,该函数将创建一个名为“y”的数组,其中包含数组中用作函数参数的每个“x”的数字“x * 10”。

标签: python arrays python-3.x function arguments


【解决方案1】:

你可以使用这个简单的代码:

def func(x):
    y = []
    for i in x:
        y.append(i*10)
    return y

【讨论】:

    【解决方案2】:

    不妨看看np.vectorize

    https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.vectorize.html

    np.vectorize 例如可以用作装饰器:

      @np.vectorize
      def func(value):
         ...
         return return_value
    

    要矢量化的函数(此处为func)必须是函数, 它将一个值作为输入并返回一个值。 然后这个函数在整个数组上被向量化。

    文档中提到了,但在这里强调一下也无妨: 一般来说,这个功能只是为了方便而不是为了性能, 它基本上相当于使用for循环。

    如果您能够从 numpys ufuncs (如np.addnp.mean 等)构建您的函数,这可能会快得多。 或者你可以自己写:
    https://docs.scipy.org/doc/numpy-1.13.0/reference/ufuncs.html

    【讨论】:

      【解决方案3】:

      你已经可以用你的函数用 numpy 做到这一点。例如,下面的代码会做你想做的事:

      x = numpy.linspace(0, 0.2, 100)
      y = x*10
      

      如果您按上述定义 x 并将其传递给您的函数,它将完全按照您的意愿执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 2020-02-13
        • 2019-10-31
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多