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

查找唯一的列和列成员

班言
2023-03-14
问题内容

他们都讨论了几种计算具有唯一行和列的矩阵的方法。

但是,至少对于未经训练的人来说,解决方案看起来有些复杂。例如,这是第一个线程的最佳解决方案(如果我错了,请纠正我),我认为这是最安全,最快的:

np.unique(a.view(np.dtype((np.void, a.dtype.itemsize*a.shape[1])))).view(a.dtype).reshape(-1, 
a.shape[1])

无论哪种方式,上述解决方案都只返回唯一行的矩阵。我正在寻找的是具有原始功能的东西np.unique

u, indices = np.unique(a, return_inverse=True)

它不仅返回唯一条目的列表,而且还返回找到的每个唯一条目的每个项目的成员资格,但是我该如何对列执行此操作?

这是我要寻找的示例:

array([[0, 2, 0, 2, 2, 0, 2, 1, 1, 2],
       [0, 1, 0, 1, 1, 1, 2, 2, 2, 2]])

我们会有:

u       = array([0,1,2,3,4])
indices = array([0,1,0,1,1,3,4,4,3])

其中的不同值u表示原始数组中唯一列的集合:

0 -> [0,0]
1 -> [2,1]
2 -> [0,1]
3 -> [2,2]
4 -> [1,2]

问题答案:

本质上,您希望np.unique返回唯一列的索引以及它们的使用位置的索引?通过转置矩阵,然后使用另一个问题的代码并添加,这很容易做到return_inverse=True

at = a.T
b = np.ascontiguousarray(at).view(np.dtype((np.void, at.dtype.itemsize * at.shape[1])))
_, u, indices = np.unique(b, return_index=True, return_inverse=True)

使用a,可以得到:

In [35]: u
Out[35]: array([0, 5, 7, 1, 6])

In [36]: indices
Out[36]: array([0, 3, 0, 3, 3, 1, 4, 2, 2, 4])

但是,我对您想u成为的人并不完全清楚。如果希望它成为唯一列,则可以使用以下内容:

at = a.T
b = np.ascontiguousarray(at).view(np.dtype((np.void, at.dtype.itemsize * at.shape[1])))
_, idx, indices = np.unique(b, return_index=True, return_inverse=True)
u = a[:,idx]

这会给

In [41]: u
Out[41]:
array([[0, 0, 1, 2, 2],
       [0, 1, 2, 1, 2]])

In [42]: indices
Out[42]: array([0, 3, 0, 3, 3, 1, 4, 2, 2, 4])


 类似资料:
  • 问题内容: 在一个假设的场景中,我是没有表创建特权的用户。我想知道表中的列是否具有 UNIQUE CONSTRAINT 。是否可以在 词典中 查找?我将如何处理? 问题答案: 此处给出的两个答案都缺少一种在列上实施唯一性的方法:通过创建 唯一索引 (而不在列上定义唯一约束)。如果您不熟悉此选项,请参见这两个链接(一个,两个)。 除 唯一约束检查 外 ,还应执行此检查: 要检查唯一约束,请使用已经提

  • 有人能提出一种有效的方法,在一列中为另一列中的每个唯一值获取最高值吗 np。数组如下所示[column0,column1,column2,column3] 其中我想根据第3列的唯一值返回第1列的最高值。之后的新数组应该是这样的: 我知道如何通过循环来做到这一点,但这不是我所关心的,因为我工作的桌子很大,我想避免循环

  • 问题内容: 我有这个桌子; 我希望选择这样的行: 任一或= 。 另一个字段应该是唯一的。 即我想从表中选择唯一,或者我需要以下结果: 怎么做? 为什么?因为我希望构建一个类似于Facebook的收件箱,在该收件箱中,已发送和已接收的消息将被聚合,而此查询是迄今为止的瓶颈。 我正在使用Rails 3.2和Postgres 9.3。 问题答案: (not )从结果中删除重复项,从而不必要。您可能希望在

  • 我有一个data.table,我需要生成另一个data.table,它只列出每列的唯一值。一个例子: 从 到 实现这一点最有效的方法是什么?

  • 问题内容: 如果我有这个: 然后在a中找到b: 有没有办法对列表做类似的事情?像这样: False的结果是可以理解的-因为它正确地寻找了一个元素’de’,而不是(我恰好想要它做的)’d’之后是’e’ 这是可行的,我知道: 我可以处理数据以获得所需的内容-但是有没有一种简短的Pythonic方式可以做到这一点? 需要说明的是:我需要在此处保留顺序(b = [‘e’,’d’],应返回False)。 如

  • 我有一个包含多行和有限(但大于1)列(包含0到9之间的值)的大型矩阵,我希望找到一种有效的方法来识别独特的行组合及其索引,然后构建总和(有些类似于枢轴逻辑)。以下是我努力实现的一个例子: 从矩阵,我想首先确定唯一的组合(按行),然后计算出现的次数/确定相应组合的行索引。 我通过使用和生成字符串实现了这一点,但这种方法似乎非常慢。根据这些想法,我试图找到一种方法,通过水平连接值来形成一个新的唯一数字

  • 本文向大家介绍如何基于R中的某些列查找唯一行?,包括了如何基于R中的某些列查找唯一行?的使用技巧和注意事项,需要的朋友参考一下 特别是当实验条件相同时,我们希望某些列的某些行值相同,这在设计实验以检查变量的固定效果时也有意做到。如果要确定唯一行,则可以通过使用R中的唯一函数来完成。 示例 请看以下数据帧- 让我们看另一个例子-

  • 本文向大家介绍如何在R数据帧的列中查找唯一值?,包括了如何在R数据帧的列中查找唯一值?的使用技巧和注意事项,需要的朋友参考一下 分类变量具有多个类别,但是如果数据集很大且类别也很大,那么识别它们就会有些困难。因此,我们可以为分类变量提取唯一值,这将有助于我们轻松识别分类变量的类别。我们可以通过对R数据帧的每一列使用唯一的方法来做到这一点。 示例 请看以下数据帧- 在列x1中找到唯一值- 在列x2中