在数组中获取字典值的向量,python

2024-05-08 20:15:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个特定字典值的向量,这些值在numpy数组中。以下是阵列的外观:

import numpy as np
edge_array = np.array(
    [[1001, 7005, {'lanes': 9, 'length': 0.35, 'type': '99', 'modes': 'cw'}],
     [1001, 8259, {'lanes': 10, 'length': 0.46, 'type': '99', 'modes': 'cw'}],
     [1001, 14007, {'lanes': 7, 'length': 0.49, 'type': '99', 'modes': 'cw'}]])

每行的前两个值都有一个向量(即10017005),但是我需要另一个向量来表示与'lanes'相关的值。在

以下是我目前为止的代码:

^{pr2}$

我得到的错误如下:

lane_values = edge_array[:, 2['lanes']]
TypeError: 'int' object has no attribute '__getitem__'

如果您需要进一步澄清,请告诉我,谢谢!在


Tags: importnumpy字典astypenp数组array
3条回答

@Zwinck建议使用结构化数组。这里有一种方法

为字典部分定义一个数据类型。它有不同数据类型的字段

dt1 = np.dtype([('lanes',int), ('length',float), ('type','S2'),('modes','S2')])

将该数据类型嵌入一个较大的数据类型中。我对前两个值使用了子数组格式:

^{pr2}$

现在创建数组。我编辑了你的表达式以适应dt。元组和列表的混合很重要。我本来可以从你的对象数组转移数据的(todo?)在

edge_array1 = np.array(  
    [([1001, 7005], ( 9,  0.35, '99','cw')),
     ([1001, 8259], ( 10, 0.46, '99','cw')),
     ([1001, 14007], (7,  0.49, '99', 'cw'))], dtype=dt)

现在可以通过'f0'字段名访问2个int值:

In [513]: edge_array1['f0']
Out[513]: 
array([[ 1001,  7005],
       [ 1001,  8259],
       [ 1001, 14007]])

“车道”通过字段名称索引的双重应用程序访问(因为它们是字段中的字段):

In [514]: edge_array1['f1']['lanes']
Out[514]: array([ 9, 10,  7])

这不是一个完全有效的例子。很难做到这点。类型尚不清楚。我怀疑,你不知怎么和纽比一起工作,但很难说。在

总之,用2['something']建立索引是不正确的,错误会告诉您原因。它试图用整数中的键来索引。查看如何在python/numpy中完成索引。在

但这就是你如何提取你的“车道”:

map(lambda x: x['lanes'], edge_array[:, 2]))
# OR (if you want a vector/np-array)
vec_of_lanes = np.array(map(lambda x: x['lanes'], edge_array[:, 2])))

更多新潮款式:

^{pr2}$

子表达式2['lanes']没有意义:您将索引到数字2。在

相反,请尝试:

[rec['lanes'] for rec in edge_array[:, 2]]

或者:

^{pr2}$

上面给出了一个普通的Python list;如果你想要一个NumPy数组,就必须调用列表中的np.array()。在

但是,更好的解决方案是将数据转换为“结构化数组”,其中包含命名列,然后可以按名称高效地编制索引。如果数组有很多行,这将对效率产生很大影响。在

相关问题 更多 >

    热门问题