【问题标题】:Extract from numpy array with coordinates of points从带有点坐标的numpy数组中提取
【发布时间】:2019-12-02 22:23:11
【问题描述】:

我目前正在编写代码,我必须从 numpy 数组中提取。

例如:[[1,1] , [0.6,0.6], [0,0]]),给定提取点的条件[x,y]必须满足x>=0.5 and y >= 0.5

我尝试使用 numpy extract,条件为 arr[0]>=0.5 & arr[1]>=0.5,但这似乎不起作用

它将条件应用于所有元素,我只想将其应用于数组中的点。

提前致谢!

【问题讨论】:

  • 你能分享你使用的代码吗?
  • [[x,y] for x,y in a if x>=0.5 and y>=0.5]
  • 您的条件不起作用,因为它被解析的方式。用括号括住表达式的每一边,否则你会得到一个TypeError

标签: python numpy


【解决方案1】:

您可以使用多个条件对数组进行切片,如下所示:

import numpy as np

a = np.array([[1, 1] , [0.6, 0.6], [0, 0]])
new = a[(a[:, 0] >= 0.5) & (a[:, 1] >= 0.5)]

结果:

array([[1. , 1. ],
       [0.6, 0.6]])

第一个条件过滤第 0 列,第二个条件过滤第 1 列。只有同时满足这两个条件的行才会出现在结果中。

【讨论】:

  • 我还有一个问题:例如,如果我的边界存储在一个 numpy 数组中(例如,我想提取成对大于 0.5 的元素,然后用 1 做同样的事情,然后用1.5 即我将 [0.5,1, 1.5] 存储在一个数组中),我将如何以一种很好的矢量化方式而不是循环遍历列表?
  • @cyborg42 - 我确信它可以完成,但我们需要确切知道您正在寻找什么输出格式。我建议将其作为一个新问题提出,并带有明确的示例输入和所需的输出。
【解决方案2】:

我会这样做:首先寻找行满填充条件:

import numpy as np
a = np.array([[1,1] , [0.6,0.6], [0,0]])
rows = np.apply_along_axis(lambda x:x[0]>=0.5 and x[1]>=0.5,1,a)

然后将其用于索引:

out = a[rows]
print(out)

输出:

[[1.  1. ]
 [0.6 0.6]]

【讨论】:

    【解决方案3】:

    可以使用python生成器解决。

    import numpy as np
    
    p = [[1,1] , [0.6,0.6], [0,0]]
    result = np.array([x for x in p if x[0]>0.5 and x[1]>0.5 ])
    

    您可以从here 阅读有关生成器的更多信息。

    你也可以试试这个:-

    p = np.array(p)
    result= p[np.all(p>0.5, axis=1)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多