gpt4 book ai didi

python - 我如何转换它以便 numpy 一次可以处理整个列表?

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:33 27 4
gpt4 key购买 nike

使用单个元素/变量可以正常工作

import math
import numpy as np
from numpy import interp

对于单一值工作正常

t = 25
minVal = 0
maxVal = 100

使用 numpy 将范围从 0 到 100 更改为 0 到 1

newT = interp(t ,[minVal,maxVal],[0,1])  
print newT

value = math.sin(newT * math.pi / 2)
print value,'value'
>>0.25
>>0.382683432365 value

上面的代码运行良好,并给出了单个变量的结果。现在我希望 numpy 使用列表作为输入执行相同的操作,因为 numpy 可以处理整个列表,就像我在其他情况下使用的那样。如何翻译上面的行以使 numpy 对整个列表进行操作?

现在可以同时对列表进行操作。我无法让下面的行工作。如何在整个列表上使用 interp?如何对整个列表进行数学计算?

t= [25,25,25]
minVal = [0,0,0]
maxVal = [100,100,100]

converedMinVal = [0,0,0]
converedMaxVal = [1,1,1]

使用 numpy 将范围从 0 到 100 更改为 0 到 1

newT = interp(t ,[minVal,maxVal],[converedMinVal,converedMaxVal])  

value = math.sin(newT * math.pi / 2)
print value,'value'

最佳答案

唯一需要更改的是使 t 成为一个数组,并(如 @hpaulj 指出)使用 np.sin() 而不是 math .sin(),例如:

import numpy as np
import math

t = [10,20,30]
minVal = 0
maxVal = 100
converedMinVal = 0
converedMaxVal = 1
newT = np.interp(t ,[minVal,maxVal],[converedMinVal,converedMaxVal])
value = np.sin(newT * math.pi / 2)
print value

...其输出为:

[ 0.15643447  0.30901699  0.4539905 ]

(编辑)

看来您可能希望在 [minVal[0], maxVal[0]]t[1] 中插入 t[0] 插值在 [minVal[1], maxVal[1]] 等中。在这种情况下,您可以使用 scipy.interpolate.interp2d(),它创建了一个在二维上进行插值的函数,例如如下:

import numpy as np
import scipy.interpolate as spi
import math

t= [10,20,30]
minVal = [0, 11, 15]
maxVal = [100, 200, 500]
x = list(range (len(t)))*2
y = minVal + maxVal
converedMinVal = [0, 2, 10]
converedMaxVal = [1, 8, 20]
z = converedMinVal + converedMaxVal

f = spi.interp2d(x, y, z)
newT = np.diag(f(range(len(t)),t))
value = np.sin(newT * math.pi / 2)
print value

函数f()对其两个向量参数的所有组合进行插值并返回一个矩阵,因此如果您只想在t中的时间点进行插值,那么您必须采用该矩阵的对角线,就像我在这里所做的那样。

我应该注意到,scipy 方法所做的计算比解决此问题实际需要的计算要多得多,但这在您的情况下可能不是问题。

关于python - 我如何转换它以便 numpy 一次可以处理整个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55028940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com