如何在Python用户定义的函数中使用数组/向量?

时间:2017-10-05 15:02:13

标签: python arrays function numpy

我正在构建一个函数来计算给定组件/子系统的可靠性。为此,我在脚本中写了以下内容:

import math as m
import numpy as np

def Reliability (MTBF,time):
  failure_param = pow(MTBF,-1)
  R = m.exp(-failure_param*time)
  return R

该函数适用于我在函数中调用的任何时间值。现在我想调用函数来计算给定数组的可靠性,让我们说 np.linspace(0,24,25)。但后来我得到的错误就像" 类型错误:只有长度为1的数组可以转换为Python标量"。

任何可以帮助我在这样的Python函数上传递数组/向量的人吗?

非常感谢你。

4 个答案:

答案 0 :(得分:3)

你正在使用的math.exp()函数对numpy一无所知。它期望标量或只有一个元素的可迭代,它可以视为标量。请改用numpy.exp(),它接受​​numpy数组。

答案 1 :(得分:2)

为了能够使用numpy数组,你需要使用numpy函数:

import numpy as np

def Reliability (MTBF,time):
    return np.exp(-(MTBF ** -1) * time)

答案 2 :(得分:0)

如果可能的话,在使用numpy对象时,应始终使用numpy函数而不是math函数。

它们不仅直接在数组和矩阵等numpy对象上工作,而且它们经过高度优化,即使用CPU的矢量化功能(如SSE)。 numpy模块中提供了大多数函数,如exp / sin / cos / pow。在scipy中可以找到一些更高级的函数。

答案 3 :(得分:-1)

不是在向量上调用Reliability,而是使用list comprehension在每个元素上调用它:

[Reliability(MTBF, test_time) for test_time in np.linspace(0,24,25)]

或者:

map(Reliability, zip([MTBF]*25, linspace(0,24,25))

第二个产生一个生成器对象,如果列表的大小开始变大,它可能会更好地提高性能。