我有一个具有重复行的DataFrame.我想获得一个具有唯一索引且没有重复项的DataFrame.丢弃重复的值是可以的.这可能吗?它会完成groupby吗?
如何删除二维numpy数组的重复行?
data = np.array([[1,8,3,3,4],
[1,8,9,9,4],
[1,8,3,3,4]])
Run Code Online (Sandbox Code Playgroud)
答案应如下:
ans = array([[1,8,3,3,4],
[1,8,9,9,4]])
Run Code Online (Sandbox Code Playgroud)
如果有两行相同,那么我想删除一个"重复"行.
我正在使用2D形状阵列来存储经度+纬度对.有一次,我必须合并其中两个2D数组,然后删除任何重复的条目.我一直在寻找类似于numpy.unique的功能,但我没有运气.我一直在考虑的任何实现都看起来非常"未经优化".例如,我正在尝试将数组转换为元组列表,删除带有set的重复项,然后再次转换为数组:
coordskeys = np.array(list(set([tuple(x) for x in coordskeys])))
Run Code Online (Sandbox Code Playgroud)
有没有现成的解决方案,所以我不重新发明轮子?
为了说清楚,我正在寻找:
>>> a = np.array([[1, 1], [2, 3], [1, 1], [5, 4], [2, 3]])
>>> unique_rows(a)
array([[1, 1], [2, 3],[5, 4]])
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我想只使用一个元组列表,但是这些列表非常大,以至于它们消耗了我的4Gb RAM + 4Gb交换(numpy数组更节省内存).
我有一个(大)整数列表列表,例如,
a = [
[1, 2],
[3, 6],
[2, 1],
[3, 5],
[3, 6]
]
Run Code Online (Sandbox Code Playgroud)
大多数对将出现两次,其中整数的顺序无关紧要(即[1, 2]相当于[2, 1]).我现在想找到只出现一次的对,并得到一个布尔列表来表示.对于上面的例子,
b = [False, False, False, True, False]
Run Code Online (Sandbox Code Playgroud)
由于a通常很大,我想避免显式循环.frozenset可能会建议映射到s,但我不确定这是否过度.
我有一个数组X:
X = np.array([[4, 2],
[9, 3],
[8, 5],
[3, 3],
[5, 6]])
Run Code Online (Sandbox Code Playgroud)
我希望在这个数组中找到几个值的行的索引:
searched_values = np.array([[4, 2],
[3, 3],
[5, 6]])
Run Code Online (Sandbox Code Playgroud)
对于这个例子,我想要一个结果,如:
[0,3,4]
Run Code Online (Sandbox Code Playgroud)
我有一个代码这样做,但我认为它过于复杂:
X = np.array([[4, 2],
[9, 3],
[8, 5],
[3, 3],
[5, 6]])
searched_values = np.array([[4, 2],
[3, 3],
[5, 6]])
result = []
for s in searched_values:
idx = np.argwhere([np.all((X-s)==0, axis=1)])[0][1]
result.append(idx)
print(result)
Run Code Online (Sandbox Code Playgroud)
我找到了类似问题的答案,但它仅适用于1d阵列.
有没有办法以更简单的方式做我想做的事情?
我有(N,3)一系列numpy值:
>>> vals = numpy.array([[1,2,3],[4,5,6],[7,8,7],[0,4,5],[2,2,1],[0,0,0],[5,4,3]])
>>> vals
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 7],
[0, 4, 5],
[2, 2, 1],
[0, 0, 0],
[5, 4, 3]])
Run Code Online (Sandbox Code Playgroud)
我想从数组中删除具有重复值的行.例如,上面数组的结果应该是:
>>> duplicates_removed
array([[1, 2, 3],
[4, 5, 6],
[0, 4, 5],
[5, 4, 3]])
Run Code Online (Sandbox Code Playgroud)
我不知道如何在没有循环的情况下有效地使用numpy(数组可能非常大).谁知道我怎么能这样做?
我有一个关于fix和floor函数的简单问题numpy.当将大于-1的负数向零舍入时,将numpy它们正确地舍入为零但是留下负号.这个负号干扰了我的服装unique_rows函数,因为它使用ascontiguousarray比较数组的元素,这个符号扰乱了唯一性.圆形和修复在这方面表现相同.
>>> np.fix(-1e-6)
Out[1]: array(-0.0)
>>> np.round(-1e-6)
Out[2]: -0.0
Run Code Online (Sandbox Code Playgroud)
有关如何摆脱标志的任何见解?我考虑使用该np.sign功能,但它带来了额外的计算成本.
提前致谢.
我试图计算每行显示的数字np.array,例如:
import numpy as np
my_array = np.array([[1, 2, 0, 1, 1, 1],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[9, 7, 5, 3, 2, 1],
[1, 1, 1, 0, 0, 0],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[1, 1, 1, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)
行[1, 2, 0, 1, 1, 1]显示3次.
一个简单的天真解决方案将涉及将我的所有行转换为元组,并应用collections.Counter,如下所示:
from collections import Counter
def row_counter(my_array):
list_of_tups = [tuple(ele) for ele in my_array]
return …Run Code Online (Sandbox Code Playgroud) 是否有一种简单/内置的方法来获得两个(或理想情况下更多)稀疏矩阵的元素最大值?即稀疏等价的np.maximum.
我有一张图片img:
>>> img.shape
(200, 200, 3)
Run Code Online (Sandbox Code Playgroud)
在像素(100,100)上我有一个很好的颜色:
>>> img[100,100]
array([ 0.90980393, 0.27450982, 0.27450982], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:这张图片中有多少种不同的颜色,我该如何枚举它们?
我的第一个想法是numpy.unique(),但不知怎的,我正在使用这个错误.