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]])
Итерации по всем ребрам были бы дорогостоящими, когда у нас большие графы. Я бы порекомендовал найти преемников и предшественников определенного узла, а затем получить информацию о соответствующем ребре.
[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')]
Это должно быть сделано, хотя, вероятно, есть более подходящие способы:
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
и выбирает атрибут из ребра, присваивая отрицательное значение, если оно от входящего ребра.
Ниже приведено одно решение путем итерации по 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]