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

And*_*arl 2 python dictionary numpy sparse-matrix

我试图获得一个特定字典值的向量,这些值在一个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'}]])
Run Code Online (Sandbox Code Playgroud)

我对每行(即的前两个值的向量10017005,但我需要用于与相关联的值的另一种载体'lanes'.

到目前为止,这是我的代码:

row_idx = edge_array[:, 0]
col_idx = edge_array[:, 1]
lane_values = edge_array[:, 2['lanes']]
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下:

lane_values = edge_array[:, 2['lanes']]
TypeError: 'int' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*nck 5

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

相反,尝试:

[rec['lanes'] for rec in edge_array[:, 2]]
Run Code Online (Sandbox Code Playgroud)

要么:

import operator
map(operator.itemgetter('lanes'), edge_array[:,2])
Run Code Online (Sandbox Code Playgroud)

以上将为您提供常规Python list; 如果你想要一个NumPy数组,你必须np.array()在列表上调用.

但是这里更好的解决方案是将您的数据转换为具有命名列的"结构化数组",然后您可以按名称进行有效索引.如果您的阵列有很多行,这将对效率产生很大影响.