我已经阅读了这个问题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点?
谢谢!
答案 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
这样的东西?这种信息很重要。列表是如何创建的?