Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将numpy数组复制到Python中已经存在的列表结构中?_Python_List_Numpy_Random_Ros - Fatal编程技术网

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

如何将numpy数组复制到Python中已经存在的列表结构中?,python,list,numpy,random,ros,Python,List,Numpy,Random,Ros,我已经读过这个问题,但我不确定它是否正是我想要的 基本上,我已经有了一个名为points的现有列表结构,我已经读过了。如果我这样做: print points[0:2] 然后我得到 [x: -42.243 y: 38.32432 z: -9.3 x: 34.243 y: -8.32432 z: 21.3] 现在,我想做的就是生成一个6x1随机向量,并将其内容直接复制到上面列表的[xyzxyz]值中。我可以通过以下方式生成随机数组: import random import numpy

我已经读过这个问题,但我不确定它是否正是我想要的

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

print points[0:2]
然后我得到

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

import random
import numpy as np
randomArray = np.random.rand(6,1)
,但如何将其内容精确复制到点中


谢谢

不太了解你的
坐标
类,也许这样行吗

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

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

首先制作一组简单的“随机”值,以2组3(2x3数组)排列:

如果
也是二维数组,则将值复制到其两行非常简单:

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]])
相反,如果
是一个列表列表,那么我们必须逐子列表、逐行复制子列表。我将使用
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
不能对元组进行这种就地更改。我必须用点[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}]
我必须从该行构造另一个字典,并使用dictionary
.update
。或
r['x']=x[0];r['y']=x[1];etc

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


您在评论中提到此列表的来源是一个ROS
.bag
文件。那么您必须已经用一些导入的模块读取了这个文件。类似于rospy的东西?这类信息很重要。列表是如何创建的?

什么是
打印类型(点[0])
打印?能否显示
打印点[0:2]
的实际输出?因为现在你所说的没有多大意义。列表内容是单个字符串吗?这是一个值的dict吗?@RNar如果我这样做,那么我得到:
如果
点中的每个项都是自定义类类型,请显示该类型is@RNar让我明确一点:如果我打印
类型(点)
,我将得到
。如果我打印类型(点[0])
,我将得到
。如果我打印类型(点[0:1])
,我将得到
。最后值得一提的是,我碰巧知道坐标只是3倍。谢谢
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}]