2014-09-09 3 views
-2

У меня есть Numpy массив, аналогичного приведенные ниже, который представляет сосед каждого человека (это первое сгенерированный пакет igraph затем преобразуется в Numpy массиваКак избавиться от значений из массива Numpy без цикла?

import numpy as np 
import igraph 
Edges = 2 
NumNodes = 30 
DisGraph = igraph.GraphBase.Barabasi(NumNodes, Edges) 
Neighbors = map(DisGraph.neighbors, range(NumNodes)) 
Neighbors = np.asarray(DisNeighbors) 

):

Neighbors=[[1, 2, 3, 4, 5, 6, 8, 9, 11, 23, 24, 27] 
[0, 2, 3, 4, 9, 10, 13, 16, 17, 19, 25, 27] [0, 1, 10, 22] 
[0, 1, 5, 6, 7, 8, 12, 14, 15, 21, 22] [0, 1] 
[0, 3, 7, 11, 15, 23, 24, 25, 29] [0, 3] [3, 5, 18] [0, 3, 12, 16, 18] 
[0, 1, 13] [1, 2, 14, 20] [0, 5] [3, 8, 19] [1, 9, 21, 28] 
[3, 10, 17, 20, 26] [3, 5] [1, 8] [1, 14, 26] [7, 8] [1, 12] [10, 14, 28] 
[3, 13] [2, 3] [0, 5] [0, 5] [1, 5] [14, 17] [0, 1, 29] [13, 20] [5, 27]] 

Я хотел бы найти способ получить определенные числа из этого массива, возможно без использования цикла. Например, если у меня есть список:

List = [0 1 2 3 4 5 6 7 8 9 10] 

Тогда я хотел бы получившийся массив Соседей, чтобы эти значения в списке удален.

Любая помощь будет оценена по достоинству.

Текущего ответ, что у меня есть следующий:

for aa in List: 
    i=0 
    for bb in Neighbors: 
     Neighbors[i] = [cc for cc in bb if cc != aa] 
     i=i+1 

Но я хотел бы знать, если есть более эффективный способ обработки этого, так как я работаю с массивами проклейки миллионов.

+0

Это не массивный массив. Размеры не совпадают. В массиве (2-d) каждая строка должна иметь одинаковое количество элементов. –

+0

print (type (Neighbors)) дает user32147

+0

Было бы очень полезно, если бы вы могли опубликовать короткую ** рабочую ** часть кода, которая генерирует «Соседи». В настоящее время неясно, какой вход вы получаете или какой объем вы хотите получить. И код, который у вас выше, является недопустимым кодом Python. См. [Эта страница справки] (http://stackoverflow.com/help/mcve). –

ответ

1

Я не знаю, что вы подразумеваете под «иметь эти значения в списке удалены» (что вы имеете в виду «удалить»?). Как правило, вы можете выбирать точки в массиве через:

import numpy as np 

a = np.random.random_integers(0,10,[10,10]) 
b = np.random.random_integers(0,10,5) 

for r in b: 
    a[a==r] = -999 


a 
Out[12]: 
array([[ 5, 1, -999, 3, 7, 5, 8, 3, 8, 4], 
     [ 8, 8, -999, 7, -999, 8, -999, -999, 4, 7], 
     [ 10, -999, -999, -999, -999, 1, -999, 7, 10, -999], 
     [ 3, 10, 8, -999, 8, 4, -999, 7, 4, 3], 
     [ 4, -999, 4, -999, -999, -999, -999, -999, -999, -999], 
     [ 5, 3, -999, 10, 10, -999, 10, 10, 3, 8], 
     [ 8, 5, -999, -999, 7, -999, 1, 8, -999, 8], 
     [ 4, 3, 8, -999, 3, 5, 4, -999, 4, 10], 
     [ 4, 3, 7, 4, -999, 7, 7, 7, -999, 8], 
     [-999, 10, -999, 5, 1, 5, 1, 10, 5, 1]]) 
Смежные вопросы