Python 2.7 如何将生成器数据读取为numpy数组

Python 2.7 如何将生成器数据读取为numpy数组,python-2.7,numpy,ros,rospy,Python 2.7,Numpy,Ros,Rospy,我正在尝试将激光数据转换为pointcloud2数据,然后使用matplotlib.pyplot显示它们。我尝试遍历生成器中的各个点,但这需要很长时间。相反,我想把它们转换成一个numpy数组,然后绘制它。我该怎么做呢?看看其他一些帖子,它们似乎回答了“将生成器转换为数组”的基本问题: 在不确切了解生成器返回的内容的情况下,我所能做的就是提供一个有点通用(但不是特别有效)的示例: 输出: #!/usr/bin/env -p python import numpy as np #

我正在尝试将激光数据转换为pointcloud2数据,然后使用matplotlib.pyplot显示它们。我尝试遍历生成器中的各个点,但这需要很长时间。相反,我想把它们转换成一个numpy数组,然后绘制它。我该怎么做呢?

看看其他一些帖子,它们似乎回答了“将生成器转换为数组”的基本问题:

在不确切了解生成器返回的内容的情况下,我所能做的就是提供一个有点通用(但不是特别有效)的示例:

输出:

#!/usr/bin/env -p python

import numpy as np

# Sample generator of (x, y, z) tuples
def my_generator():
    for i in range(10):
        yield (i, i*2, i*2 + 1)
        i += 1

def gen_to_numpy(gen):
    return np.array([x for x in gen])

gen = my_generator()
array = gen_to_numpy(gen)

print(type(array))
print(array)

[[ 0  0  1]
[ 1  2  3]
[ 2  4  5]
[ 3  6  7]
[ 4  8  9]
[ 5 10 11]
[ 6 12 13]
[ 7 14 15]
[ 8 16 17]
[ 9 18 19]]
尽管如此,我还是无法评论这一举措的效率。您提到,通过直接从生成器读取点进行绘图需要很长时间,但是转换为Numpy数组仍然需要遍历整个生成器才能获得数据。如果您正在使用的laser-to-pointcloud实现可以直接以数组的形式提供数据,那么效率可能会更高,但这是ROS回答论坛的一个问题(我注意到您)

#!/usr/bin/env -p python

import numpy as np

# Sample generator of (x, y, z) tuples
def my_generator():
    for i in range(10):
        yield (i, i*2, i*2 + 1)
        i += 1

def gen_to_numpy(gen):
    return np.array([x for x in gen])

gen = my_generator()
array = gen_to_numpy(gen)

print(type(array))
print(array)
<class 'numpy.ndarray'>
[[ 0  0  1]
 [ 1  2  3]
 [ 2  4  5]
 [ 3  6  7]
 [ 4  8  9]
 [ 5 10 11]
 [ 6 12 13]
 [ 7 14 15]
 [ 8 16 17]
 [ 9 18 19]]