return 迭代数组中的元素

return iterated elements from an array

我有这个功能。我想对数组 vec_steering 中的所有元素以 (steering, throttle) 的形式 return。在(steering, throttle)中,这里的油门值是常数(1150),转向根据正弦曲线方程变化。

 def case2():
        vector = np.vectorize(np.int)
        time_interval = 5
        samples = 50
        t = np.linspace(0, time_interval, samples)
        time_req = 5.0
        A = 900
        vec_steering = A*np.sin(2*(np.pi)*t/time_req) + 1024
        vec_steering = vector(vec_steering)
        throttle = 1150
        for s in vec_steering:
            steering, throttle = s, throttle
        return steering, throttle

当我 运行 这个时,我只得到 (steering, throttle) 的最后一个元素作为 (1023, 1050) 但我希望迭代 vec_steering 的所有值并且 return编辑。对此的任何见解都会有所帮助。谢谢

最快的解决方案是 return 一个 Nx2 数组:

def case2():
    steering = (900 * np.sin(2.0 * np.pi * np.linspace(0, 5, 50) / 5.0) + 1024).astype(int)
    throttle = np.full_like(steering, 1150)
    return np.stack((steering, throttle), axis=-1)

您可以像往常一样使用类似

的方法迭代数组
for s, t in case2():
    # Do stuff with s and t

更好的是,您可以对整个数组执行矢量化操作。请记住,np.vectorize 是用词不当:它运行一个美化的 python 级 for 循环。

另一种方法是将您的函数变成生成器:

def case2():
    for s in (900 * np.sin(2.0 * np.pi * np.linspace(0, 5, 50) / 5.0) + 1024).astype(int):
        yield s, 1150

使用 yield 将您的函数变成一个 return 生成器对象,这让您可以懒惰地 return 实际元组中的数组元素。您可以像上面显示的 for 循环一样迭代结果,但您将无法在生成器上执行矢量化计算。

您的代码 return 只是最后一个元素,因为在循环遍历整个向量之后,最后一个元素将存储在变量 steering 和 throttle 中,这就是 return编辑。要 return 向量的所有值,您可以遍历它并将值存储在 2 个临时列表(或一个 2-D 列表,任何适合您的列表)和 return 列表中。然后,您将能够从函数调用中单独访问列表元素。

如果您正在寻找这样的东西,


def test(n):
a = [1,2,3,4,5]
b = 2
c = []
return a[n],b

for n in range(5):
print(test(n))

尝试:

 def case2(n):
        vector = np.vectorize(np.int)
        time_interval = 5
        samples = 50
        t = np.linspace(0, time_interval, samples)
        time_req = 5.0
        A = 900
        vec_steering = A*np.sin(2*(np.pi)*t/time_req) + 1024
        vec_steering = vector(vec_steering)
        throttle = 1150
        #returning the nth element , throttle
        return vec_steering[n], throttle