如何在不使用循环的情况下从Numpy数组中排除值?

2024-06-02 05:06:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个与下面类似的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)

):

^{pr2}$

我想找个方法从这个数组中得到某些数字, 可能没有使用循环。 例如,如果我有一个列表:

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

但我想知道是否有更有效的方法来处理这一问题,因为我正在处理数百万个阵列的大小。在


Tags: 方法inimportnumpyfornpneighbors数组
1条回答
网友
1楼 · 发布于 2024-06-02 05:06:29

我不知道你所说的“删除列表中的这些值”是什么意思(“删除”是什么意思)。但是,通常可以通过以下方式在阵列中选择点:

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]])

相关问题 更多 >