Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何转换它,使numpy一次在整个列表上工作?_Python_List_Numpy - Fatal编程技术网

Python 我如何转换它,使numpy一次在整个列表上工作?

Python 我如何转换它,使numpy一次在整个列表上工作?,python,list,numpy,Python,List,Numpy,使用单个元素/变量可以正常工作 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' &

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

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在整个列表上运行

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

converedMinVal = [0,0,0]
converedMaxVal = [1,1,1]
现在要同时对列表进行操作。我无法让下面的线路工作。如何在整个列表上使用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'

我将编写一个函数来遍历这些列表,并向您提供值

def get_values(t_vals, minVals, maxVals):
    values = []
    for i in range(len(t_vals)):
        newT = interp(t_vals[i], [minVals[i], maxVals[i]], [0,1]) 
        value =  math.sin(newT * math.pi / 2)
        values += value
    return values

我将编写一个函数来遍历这些列表,并向您提供值

def get_values(t_vals, minVals, maxVals):
    values = []
    for i in range(len(t_vals)):
        newT = interp(t_vals[i], [minVals[i], maxVals[i]], [0,1]) 
        value =  math.sin(newT * math.pi / 2)
        values += value
    return values

唯一需要更改的是使
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 ]
(编辑)

您可能希望
t[0]
[minVal[0],maxVal[0]]
中插值,而
t[1]
[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
方法所做的计算比解决这个问题所需要的要多得多,但这在您的情况下可能不是问题

唯一需要更改的是使
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 ]
(编辑)

您可能希望
t[0]
[minVal[0],maxVal[0]]
中插值,而
t[1]
[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
方法所做的计算比解决这个问题所需要的要多得多,但这在您的情况下可能不是问题

math.sin
仅适用于标量和单值
np.sin
与数组一起工作。谢谢Jpaulj。如何将下面的行转换为使用数组?newT=interp(t[minVal,maxVal],[0,1]),value=math.sin(newT*math.pi/2)
math.sin
仅适用于标量和单个值
np.sin
与数组一起工作。谢谢Jpaulj。如何将下面的行转换为使用数组?newT=interp(t[minVal,maxVal],[0,1])和value=math.sin(newT*math.pi/2)谢谢,我可以遍历列表,但是因为numpy可以处理列表,所以我希望使用numpy的速度,而不是遍历大列表。我更愿意使用numpy来处理整个列表,而不是逐项迭代列表谢谢,我可以迭代列表,但由于numpy可以处理列表,我希望使用numpy的速度,而不是迭代大型列表。更愿意使用numpy处理整个列表,而不是逐项遍历列表。非常感谢,minVal和MaxVal也可以是数组吗?在我的例子中,两者都是数组。当我对这些值使用数组时。。。我犯了一个错误。我怎样才能找到它?minVal和maxVal不能是
interp()
中的数组。但是,假设它们是,我是否正确理解您希望
t[0]
插入
[minVal[0],maxVal[0]]
t[1]
插入
[minVal[1],maxVal[1]]
等。?你可以用
scipy.interpolate.interp2d()
做类似的事情,它创建了一个二维插值函数。感谢Simon分享你的知识,你的理解非常完美,这是一个巨大的帮助。你能告诉我如何使用scipy做同样的事情吗。。。我必须用scipy重写所有内容吗?如果不太复杂,也不太费时,你能帮忙吗?谢谢西蒙。。太好了!谢谢你的邀请help@Josh:不客气。如果任何答案满足您的需要,您可以“勾选”它以表明您已接受答案和/或对其进行投票。非常感谢,minVal和MaxVal也可以是数组吗?在我的例子中,两者都是数组。当我对这些值使用数组时。。。我犯了一个错误。我怎样才能找到它?minVal和maxVal不能是
interp()
中的数组。但是,假设它们是,我是否正确理解您希望
t[0]
插入
[minVal[0],maxVal[0]]
t[1]
插入
[minVal[1],maxVal[1]]
等。?你可以用
scipy.interpolate.interp2d()
做类似的事情,它创建了一个二维插值函数。感谢Simon分享你的知识,你的理解非常完美,这是一个巨大的帮助。你能告诉我如何使用scipy做同样的事情吗。。。我必须重写sc中的所有内容吗