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

从NumPy 2D数组中删除重复的列和行

乜思淼
2023-03-14
问题内容

我正在使用2D形状数组存储经度和纬度对。一方面,我必须合并两个2D数组,然后删除所有重复的条目。我一直在寻找类似于numpy.unique的函数,但是我没有运气。我一直在考虑的任何实现都看起来“没有优化”。例如,我正在尝试将数组转换为元组列表,使用set删除重复项,然后再次转换为数组:

coordskeys = np.array(list(set([tuple(x) for x in coordskeys])))

是否有任何现有的解决方案,所以我不会重新发明轮子吗?

为了清楚起见,我在寻找:

>>> a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]])
>>> unique_rows(a)
array([[1, 1], [2, 3],[5, 4]])

顺便说一句,我只想使用一个元组列表,但是列表太大了,以至于它们消耗了我的4Gb RAM + 4Gb交换(numpy阵列的内存效率更高)。


问题答案:

这是一个主意,需要一些工作,但可能会很快。我将给您一维的情况,让您找出如何将其扩展到二维的情况。以下函数查找一维数组的唯一元素:

import numpy as np
def unique(a):
    a = np.sort(a)
    b = np.diff(a)
    b = np.r_[1, b]
    return a[b != 0]

现在要将其扩展到2d,您需要更改两件事。您将需要弄清楚自己如何进行排序,关于排序的重要事项是两个相同的条目彼此相邻。其次,您需要执行类似的操作,(b != 0).all(axis)因为您要比较整个行/列。让我知道这是否足以让您入门。

更新:在道格的一些帮助下,我认为这应该适用于二维情况。

import numpy as np
def unique(a):
    order = np.lexsort(a.T)
    a = a[order]
    diff = np.diff(a, axis=0)
    ui = np.ones(len(a), 'bool')
    ui[1:] = (diff != 0).any(axis=1) 
    return a[ui]


 类似资料:
  • 问题内容: 我使用下面的代码行遍历数据库中的一个表: 如果我打印出数组: 我会得到这个: 但是我想摆脱数组中的重复项,所以我使用 我得到下面的奇怪结果,这不是我想要的结果: 理想情况下,我认为它应该返回以下内容: 我该怎么做才能正确处理?我使用了错误的PHP语法/默认功能吗? 问题答案: 该功能将为您完成此操作。您只需要添加标志:

  • 在mongodb中,我有一个集合,其中数组有重复的条目,如 我需要删除重复的数组,只保留唯一的数组值,如下所示。 最好的方法是什么 谢啦

  • 问题内容: 我应该读一个包含许多不同电子邮件地址的文件,并使用数组将它们打印出来。问题是我需要消除重复的电子邮件。 我能够尝试/捕捉并打印出电子邮件地址。但是,我不确定如何删除重复项。我对散列码或如何使用Set尚不了解。任何援助将不胜感激。 这是我到目前为止的内容: 问题答案: 简单的解决方案是使用Set Java, 因此设置自动删除重复值 并且在你的代码中你拥有数组,而不是将转换数组直接使用代码

  • 这是我的数据: 使用Lodash,我如何删除具有重复id键的对象?有过滤器,地图和独特的东西,但不太确定。 我的真实数据集要大得多,有更多的键,但概念应该是一样的。

  • 我有一个问题编码这个: 编写一个名为的静态方法,该方法将整数数组作为输入,并返回一个新的整数数组,其中所有重复项都被删除。例如,如果输入数组具有元素{4,3,3,4,5,2,4},则结果数组应为{4,3,5,2} 这是我目前所做的

  • 问题内容: 如何在不使用HashSet的情况下从字符串数组中删除重复的字符串? 我尝试使用循环,但是单词不能删除。 问题答案: 尝试使用以下代码删除重复的单词: