【问题标题】:How to get rid of values from Numpy array without loop?如何在没有循环的情况下从 Numpy 数组中删除值?
【发布时间】: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 时遇到问题,还是在从数组中删除元素时遇到问题?

标签: python arrays numpy


【解决方案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]])

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 2017-03-25
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多