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