Python列表进入numpy数组

时间:2017-10-05 14:50:54

标签: python python-3.x numpy

我已经看到很多列表到数组的例子,但没有这种格式的列表到数组的例子,这很奇怪,因为我提供的列表格式是定义图形的标准首选方式,指向 - 您可以在任何表,csv,数据库等中找到的点映射。我尝试了所有here没有运气。谢谢你的任何想法。

Input and desired output

input=  [[A, A, 0],
        [A, B, 5],
        [A, C, 3],
        [B, A, 5],
        [B, B, 0],
        [B, C, 6],
        [C, A, 3],
        [C, B, 6],
        [C, C, 0]]

desiredOutput=  [[0, 5, 3],
                [5, 0, 6],
                [3, 6, 0]]

2 个答案:

答案 0 :(得分:2)

您可以切片并重新整形:

input= [['A', 'A', 0], ['A', 'B', 5], ['A', 'C', 3], ['B', 'A', 5], ['B', 'B', 0], ['B', 'C', 6], ['C', 'A', 3], ['C', 'B', 6], ['C', 'C', 0]]
arr = np.array(input)
desiredOutput=arr[:, 2].reshape(3, 3).astype(np.float)
# array([[ 0.,  5.,  3.],
#        [ 5.,  0.,  6.],
#        [ 3.,  6.,  0.]])

答案 1 :(得分:2)

这是将邻接矩阵生成为2D Numpy数组的一种方法。它假设输入图形数据是正确的,特别是它的长度是一个完美的正方形。

import numpy as np

graph_data =  [
    ['A', 'A', 0], ['A', 'B', 5], ['A', 'C', 3],
    ['B', 'A', 5], ['B', 'B', 0], ['B', 'C', 6],
    ['C', 'A', 3], ['C', 'B', 6], ['C', 'C', 0],
]

size = np.sqrt(len(graph_data)).astype(np.int)
adjacency_matrix = np.array(graph_data)[:,-1].astype(np.int).reshape(size, size)
print(adjacency_matrix)

<强>输出

[[0 5 3]
 [5 0 6]
 [3 6 0]]

上面的代码还假设图形数据的顺序正确,因为它忽略了字母。当然,在尝试将图形数据转换为数组之前,可以通过对图形数据进行排序来轻松处理。例如,

graph_data.sort()

这是一个输出元组列表的纯Python版本:

graph_data =  [
    ['A', 'A', 0], ['A', 'B', 5], ['A', 'C', 3],
    ['B', 'A', 5], ['B', 'B', 0], ['B', 'C', 6],
    ['C', 'A', 3], ['C', 'B', 6], ['C', 'C', 0],
]

graph_data.sort()
size = int(len(graph_data) ** 0.5)
it = iter(row[-1] for row in graph_data)
print(list(zip(*[it]*size)))

<强>输出

[(0, 5, 3), (5, 0, 6), (3, 6, 0)]