我正在构建一个函数来计算给定组件/子系统的可靠性。为此,我在脚本中写了以下内容:
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函数上传递数组/向量的人吗?
非常感谢你。
答案 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))
第二个产生一个生成器对象,如果列表的大小开始变大,它可能会更好地提高性能。