【发布时间】:2014-09-09 16:04:29
【问题描述】:
我有一个类似于以下的 numpy 数组,表示每个人的邻居(这是首先由 igraph 包生成然后转换为 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]
然后,我希望生成的 Neighbors 数组将 List 中的这些值删除。
任何帮助将不胜感激。
我目前的答案如下:
for aa in List:
i=0
for bb in Neighbors:
Neighbors[i] = [cc for cc in bb if cc != aa]
i=i+1
但我想知道是否有更有效的方法来处理这个问题,因为我正在处理数百万的数组。
【问题讨论】:
-
这不是一个 numpy 数组。尺寸不匹配。在 (2-d) 数组中,每一行必须具有相同数量的元素。
-
print(type(Neighbors)) 给出
-
如果您能发布一段简短的工作代码来生成
Neighbors,那将非常有帮助。目前尚不清楚您实际获得的输入类型或您想要的输出类型。而且您上面的代码不是有效的 Python 代码。见this help page。 -
我不确定你是否熟悉 igraph 包。我使用 igraph 包创建数百万个节点的图形,然后使用 .neighbor 函数提取每个节点的邻居。然后我使用 numpy.asarray 转换为 numpy 数组,以便我可以操作它..我遇到了很多麻烦。有什么建议吗?
-
这听起来不像你原来的帖子,所以现在我真的很困惑。您在使用 numpy.asarray 时遇到问题,还是在从数组中删除元素时遇到问题?