如何将numpy数组复制到Python中已存在的列表结构中?

时间:2015-11-06 20:19:45

标签: python list numpy random ros

我已经阅读了这个问题here,但我不确定它是在做我正在寻找的问题。

基本上,我已经有一个名为points的现有列表结构,我已经读过了。如果我这样做:

print points[0:2]

然后我得到

[x: -42.243 
y: 38.32432 
z: -9.3
x: 34.243 
y: -8.32432 
z: 21.3]

现在,我想做的就是生成一个6x1随机向量,并将其内容直接复制到上面列表的[x y z x y z]值中。我可以通过以下方式生成随机数组:

import random
import numpy as np
randomArray = np.random.rand(6,1)

,但如何将其内容完全复制到INTO点?

谢谢!

2 个答案:

答案 0 :(得分:1)

coordinate课程不太了解,也许这有用吗?

num_points = 2
random_array = np.random.rand(num_points, 3)
for i, point in enumerate(random_array):
    points[i] = coordinate(*point)

答案 1 :(得分:1)

为了让您了解复制将如何依赖于该列表中的元素,我将演示几种已知类型的元素:

首先制作一个简单随机的'一组值,分为2组3(2x3数组):

In [213]: randomArray=np.arange(6).reshape(2,3)

如果points也是二维数组,则将值复制到其中两行是微不足道的:

In [214]: points = np.zeros((4,3),int)    
In [215]: points[:2,:]=randomArray

In [216]: points
Out[216]: 
array([[0, 1, 2],
       [3, 4, 5],
       [0, 0, 0],
       [0, 0, 0]])

相反,如果points是列表列表,那么我们必须逐行地按子列表复制子列表。我会使用zip来协调。我也可以使用索引r[i][:] = x[i,:]

In [217]: points = [[0,0,0] for _ in range(3)]
In [218]: points
Out[218]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
In [219]: for r,x in zip(points[:2],randomArray):
   .....:     r[:] = x

In [220]: points
Out[220]: [[0, 1, 2], [3, 4, 5], [0, 0, 0]]

让我们尝试一下元组列表:

In [221]: points = [(0,0,0) for _ in range(3)]
In [222]: for r,x in zip(points[:2],randomArray):
    r[:] = x
   .....:     
...    
TypeError: 'tuple' object does not support item assignment

不能对元组进行这种内部更改。我必须用points[0] = tuple(randomArray[0])等等替换它们。

字典列表怎么样?

In [223]: points = [{'x':0,'y':0,'z':0} for _ in range(3)]    
In [224]: points
Out[224]: [{'x': 0, 'y': 0, 'z': 0}, {'x': 0, 'y': 0, 'z': 0}, {'x': 0, 'y': 0, 'z': 0}]

In [225]: for r,x in zip(points[:2],randomArray):
    r.update({'x':x[0],'y':x[1],'z':x[2]})
   .....:     
In [226]: points
Out[226]: [{'x': 0, 'y': 1, 'z': 2}, {'x': 3, 'y': 4, 'z': 5}, {'x': 0, 'y': 0, 'z': 0}]

我必须从该行构造另一个字典,并使用字典.update。或r['x']=x[0]; r['y']=x[1]; etc

请注意,所有这些points的显示方式与您的示例不同。你的列表必须包含我一无所知的对象 - 除了它的str()方法以模糊的字典方式显示值。如果有的话,那个显示器不会告诉我如何修改它们。

您在评论中提到此列表的来源是ROS .bag文件。然后你必须用一些导入的模块读取这个文件。像rospy这样的东西?这种信息很重要。列表是如何创建的?