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
我有这个功能。我想对数组 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