Атрибут края Networkx

Почему он не срезается?

A numpy.meshgrid возвращает список из numpy.ndarray .

Пример

Предположим, вы хотите создать meshgrid из следующих x и y:

x = np.random.randint(10, size=(5))
y = np.random.randint(10, size=(5))
meshgrid = np.meshgrid(x,y)

. Вы получили бы что-то вроде:

[array([[7, 1, 1, 0, 0],
        [7, 1, 1, 0, 0],
        [7, 1, 1, 0, 0],
        [7, 1, 1, 0, 0],
        [7, 1, 1, 0, 0]]), array([[0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [3, 3, 3, 3, 3],
        [2, 2, 2, 2, 2],
        [7, 7, 7, 7, 7]])]

Но это список, и список не имеет формы атрибута (AttributeError: 'list' object has no attribute 'shape').

Затем как отрезать это?

Если вам нужно нарезать список как матрицу numpy, преобразуйте ее в массив numpy:

numpy_meshgrid = np.array(meshgrid)

Скорее всего, результат вашей функции func также требует преобразования в numpy.ndarray.

Теперь вы можете нарезать все, что вы хотите:

array= np.random.randint(10, size=(3, 4, 2, 2))
slice = array[:,:,0,0]

И результат:

array([[6, 7, 5, 3],
   [1, 6, 0, 5],
   [4, 5, 6, 9]])
1
задан foglerit 19 January 2019 в 02:41
поделиться

3 ответа

Итерации по всем ребрам были бы дорогостоящими, когда у нас большие графы. Я бы порекомендовал найти преемников и предшественников определенного узла, а затем получить информацию о соответствующем ребре.

[G.get_edge_data('a',neigh)['attr'] for neigh in G.successors('a')] + \
[-G.get_edge_data(neigh,'a')['attr'] for neigh in G.predecessors('a')]  
0
ответ дан ai_learning 19 January 2019 в 02:41
поделиться

Это должно быть сделано, хотя, вероятно, есть более подходящие способы:

In [3]: [G[e[0]][e[1]]['attr'] for e in  G.out_edges('a')] + [-G[e[0]][e[1]]['attr'] for e in  G.in_edges('a')]

Out[3]: [0.6, 0.2, -0.3]

Приведенный выше код использует два понимания списка для прохождения всех исходящих и входящих ребер из a и выбирает атрибут из ребра, присваивая отрицательное значение, если оно от входящего ребра.

0
ответ дан foglerit 19 January 2019 в 02:41
поделиться

Ниже приведено одно решение путем итерации по edges.data() графика. П.С .: Я в основном использовал дополнения табуляции в JuPyter, чтобы найти атрибуты, а затем придумал следующее решение, поиграв с различными атрибутами. Этот код даст вам только атрибуты для 'a', как вы просили. Поэтому, если вы добавите четвертый узел как G.add_edge('d', 'b', attr=0.7), на выходе будет [0.6, 0.2, -0.3], где четвертый узел не считается.

attributes = []

for edge in G.edges.data():
    if edge[0] == 'a':
        attributes.append(edge[-1]['attr'])
    elif edge[1] == 'a'   :
        attributes.append(-edge[-1]['attr'])

print (attributes)    
# [0.6, 0.2, -0.3]
0
ответ дан Sheldore 19 January 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: