如何删除numpy数组中的非对称对?

戴维德·菲科(Davide Fiocco)

给定一个data整数的Nx2 numpy numpy数组(我们可以假设data没有重复的行),我只需要保留其元素满足关系的行

(data[i,0] == data[j,1]) & (data[i,1] == data[j,0])

例如与

import numpy as np
data = np.array([[1, 2], 
                 [2, 1],
                 [7, 3],
                 [6, 6],
                 [5, 6]])

我应该回来

array([[1, 2], # because 2,1 is present
       [2, 1], # because 1,2 is present
       [6, 6]]) # because 6,6 is present

一种详细的方法是

def filter_symmetric_pairs(data):
  result = np.empty((0,2))
  for i in range(len(data)):
    for j in range(len(data)):
      if (data[i,0] == data[j,1]) & (data[i,1] == data[j,0]):
        result = np.vstack([result, data[i,:]])
  return result

我想出了一个更简洁的方法:

def filter_symmetric_pairs(data):
  return data[[row.tolist() in data[:,::-1].tolist() for row in data]]

有人可以建议一个更好的numpy成语吗?

Jdehesa

这是您可以使用的几种不同方法。第一个是“显而易见的”二次方解决方案,它很简单,但是如果输入数组很大,可能会给您带来麻烦。只要输入中没有很大范围的数字,第二个就应该可以工作,并且它的优点是可以处理线性数量的内存。

import numpy as np

# Input data
data = np.array([[1, 2],
                 [2, 1],
                 [7, 3],
                 [6, 6],
                 [5, 6]])

# Method 1 (quadratic memory)
d0, d1 = data[:, 0, np.newaxis], data[:, 1]
# Compare all values in first column to all values in second column
c = d0 == d1
# Find where comparison matches both ways
c &= c.T
# Get matching elements
res = data[c.any(0)]
print(res)
# [[1 2]
#  [2 1]
#  [6 6]]

# Method 2 (linear memory)
# Convert pairs into single values
# (assumes positive values, otherwise shift first)
n = data.max() + 1
v = data[:, 0] + (n * data[:, 1])
# Symmetric values
v2 = (n * data[:, 0]) + data[:, 1]
# Find where symmetric is present
m = np.isin(v2, v)
res = data[m]
print(res)
# [[1 2]
#  [2 1]
#  [6 6]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java中以非对称加密生成密钥对?

来自分类Dev

Android中的非对称RelativeLayout行为

来自分类Dev

从非对称数据帧中获取方阵

来自分类Dev

LINUX中的非对称路由问题

来自分类Dev

R中的非对称eta方阵

来自分类Dev

从非对称数据帧中获取方阵

来自分类Dev

android中的RSA/非对称解密

来自分类Dev

如何确定OpenPGP加密是对称还是非对称?

来自分类Dev

numpy中不对称数组的均值

来自分类Dev

由于指数大小有限,如何在 C# 中创建非对称密钥?

来自分类Dev

如何从numpy数组数组中删除无行?

来自分类Dev

创建不受约束的数组非对称数组

来自分类Dev

如何使用类似布尔型的方形对称numpy数组中的True值存储存储索引对?

来自分类Dev

如何删除numpy数组中的列?

来自分类Dev

如何从numpy数组中删除重叠的块?

来自分类Dev

静态非对称加密

来自分类Dev

非对称加密

来自分类Dev

非对称衰减函数

来自分类Dev

NetworkX 非对称权重

来自分类Dev

如何将BCrypt用于RSA(非对称加密)

来自分类Dev

如何在Android上创建非对称布局

来自分类Dev

在Shiny中创建涉及行和列的非对称布局

来自分类Dev

处理Web服务中的非对称标头

来自分类Dev

独特的对称元素Numpy数组

来自分类Dev

HTTPS使用非对称或对称加密?

来自分类Dev

非对称地图标记

来自分类Dev

Jasypt和非对称加密

来自分类Dev

Python:完整的非对称网格

来自分类Dev

JWT使用非对称加密