我有一个带有电阻(self.interp_data [:,0])和相应温度(self.interp_data [:,1])的列表。我想使用numpy中的interp函数根据测得的电阻确定温度。这是我的功能:
def calc_T(self, V_out, V_g, R_ref):
R_T = np.array([(V_g * R_ref/ V_out) - R_ref])
print R_T
print type( self.interp_data[0,0])
print type( self.interp_data[0,1])
print bisect_right(self.interp_data[:,0], R_T)
print self.interp_data[:,0] < R_T
return np.interp(R_T, self.interp_data[:,0],self.interp_data[:,1] )
结果如下:
[ 22549.01960784]
<type 'numpy.float64'>
<type 'numpy.float64'>
211
[False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True True]
[ 150.]
该列表包含211个元素,最后一个元素的值为150。因此,二等分和interp都认为R_T小于列表中的最小电阻值。
但是比较表明它介于两者之间,我同意。如何正确使用interp以获得与我测得的电阻相对应的温度?
最佳答案
问题是必须对xp
的np.interp(x, xp, fp)
输入进行排序。考虑到这一点,您的示例应该可以做到:
a = self.interp_data[:,0]
b = self.interp_data[:,1]
argsa = np.argsort(a)
xp = np.take(a, argsa)
fp = np.take(b, argsa)
np.interp(R_T, xp, fp)
关于python - 正确使用numpy interp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25715661/