当前位置: 首页 > 面试题库 >

过滤numpy数组以仅保留给定值的一行

刘博雅
2023-03-14
问题内容

我有一个较大的nx 2 numpy数组,其格式设置为(x,y)坐标。我想过滤此数组,以便:

  1. 标识具有重复x值的坐标对。
  2. 仅保留y值最高的重复项的坐标对。

例如,在以下数组中:

arr = [[1, 4]
       [1, 8]
       [2, 3]
       [4, 6]
       [4, 2]
       [5, 1]
       [5, 2]
       [5, 6]]

我希望结果是:

arr = [[1, 8]
       [2, 3]
       [4, 6]
       [5, 6]]

Ive探索了np.unique和np.where,但无法弄清楚如何利用它们来解决此问题。非常感谢!


问题答案:

这是一种基于np.maximum.reduceat-

def grouby_maxY(a):
    b = a[a[:,0].argsort()] # if first col is already sorted, skip this
    grp_idx = np.flatnonzero(np.r_[True,(b[:-1,0] != b[1:,0])])
    grp_maxY = np.maximum.reduceat(b[:,1], grp_idx)
    return np.c_[b[grp_idx,0], grp_maxY]

另外,如果你要带np.unique,我们可以用它来寻找grp_idxnp.unique(b[:,0], return_index=1)[1]

样品运行-

In [453]: np.random.seed(0)

In [454]: arr = np.random.randint(0,5,(10,2))

In [455]: arr
Out[455]: 
array([[4, 0],
       [3, 3],
       [3, 1],
       [3, 2],
       [4, 0],
       [0, 4],
       [2, 1],
       [0, 1],
       [1, 0],
       [1, 4]])

In [456]: grouby_maxY(arr)
Out[456]: 
array([[0, 4],
       [1, 4],
       [2, 1],
       [3, 3],
       [4, 0]])


 类似资料:
  • 问题内容: 我想要一个numpy 2D ndarray的子​​数组(在最小和最大之间) 最小值和最大值是浮点数,以便与数组xy_dat的第一个值进行比较 xy_dat是2D numpy数组: x_displayed已正确过滤,但我丢失了第二个值(现在是一维数组): 如何在第一个值上过滤并保留另一个值? 问题答案: 您应该仅在 第一 列上执行条件: 我们在这里构造一个视图,其中仅考虑带有的第一列。现

  • 问题内容: 我有两个NumPy数组,例如: 和一个过滤器数组,例如: 我如何才能得到一个新的numpy数组,其中仅包含其中相同索引为True的值?就我而言:。 根据公认的解决方案(具有不同的值): 问题答案: NumPy支持布尔索引 假设 和是NumPy数组而不是Python列表(如问题所示)。您可以使用进行转换。

  • 问题内容: 我需要过滤一个数组以删除低于某个阈值的元素。我当前的代码是这样的: 问题在于,这会使用带有lambda函数(慢速)的过滤器来创建一个临时列表。 由于这是一个非常简单的操作,因此也许有一个numpy函数可以高效地完成此操作,但是我一直找不到它。 我以为实现此目的的另一种方法可能是对数组进行排序,找到阈值的索引并从该索引开始返回一个切片,但是即使对于较小的输入这会更快(而且无论如何也不会引

  • 问题内容: 我有一套文件,例如 如标题中所述:是否可以使用Nest过滤包含给定标签的所有文档? 例如,上面的记录将匹配[‘c’,’d’] 还是应该手动构建多个“ OR”? 问题答案: 编辑:下面的位集可能是有趣的读物,但答案本身有点过时。 其中一些功能在2.x中有所变化。Slawek还在另一个答案中指出,在这种情况下,查询是使搜索干燥的一种简便方法。最后重构为当前最佳实践。—nz 您可能需要带有子

  • 问题内容: 我已经根据numpy文档创建了numpy ndarray的子​​类。特别是,我通过修改提供的代码添加了自定义属性。 我正在使用Python在并行循环中处理此类的实例。据我了解,将范围本质上“复制”到多个线程的方法是使用。 我现在要面对的问题与numpy数组的腌制方式有关。我找不到关于此的任何综合文档,但是莳萝开发人员之间的一些讨论建议我应该专注于该方法,该方法在腌制时被调用。 谁能进一

  • 问题内容: 我有一个二维的numpy数组,具有相等数量的列和行。我想将它们排列成一个较大的数组,对角线上的数组较小。应该可以指定起始矩阵在对角线上的频率。例如: 因此,如果我希望此数组在对角线上2次,则期望的输出将是: 3次: 有没有一种快速的方法来使用numpy方法以及对于任意大小的起始数组(仍然考虑到起始数组具有相同的行数和列数)来实现这一点? 问题答案: 方法1 经典案例- 样品运行- 方法

  • 我想使用JOLT转换做两件事: 过滤名为 myArray 的数组中的元素,以便仅保留具有“v_518”属性的元素 过滤掉除“v_518”和“LFDN”之外的其余元素的所有属性 输入: 期望输出: 到目前为止,我尝试了什么,但没有按预期工作: 我尝试使用http://jolt-demo.appspot.com/#andrewkcarter2中的示例,但我不知道如何做到这一点。

  • 问题内容: 这给出了预期的结果 这有效 但是如果我们将其更改为 我收到“ TypeError:无法将复数转换为浮点数”。 如果现在我们省略显式的,我将得到“ ValueError:设置具有序列的数组元素”。 有人可以解释发生了什么,以及如何做到无误吗?我迷路了。 问题答案: 要插入complex或in ,您显然需要将其视为数组,因此可以将其索引或分配给的一个切片: 看来NumPy无法正确处理这种情