python - 在 2D numpy 数组中查找和删除回文行

标签 python pandas numpy numba

从矩阵中查找/删除回文行的 pythonic 和有效方法是什么。虽然标题建议矩阵是一个 numpy ndarray,但如果它导致更优雅的解决方案,它可以是 pandas DataFrame

显而易见的方法是使用 for 循环来实现它,但我感兴趣的是是否有更有效和简洁的方法。

我的第一个想法是连接行和逆行,然后从连接矩阵中提取重复项。但是这个重复项列表将包含初始行及其逆行。因此,要删除回文的第二个实例,我仍然需要进行一些 for 循环。

我的第二个想法是以某种方式使用广播来获取行的笛卡尔积并应用我自己的 ufunc(可能是使用 numba 创建的)来获取 2D bool 矩阵。但我不知道如何创建将获得矩阵轴而不是标量的 ufunc。

编辑:

我想我应该为表述不当的问题道歉(英语不是我的母语)。我不需要查明是否有任何行本身是回文,但如果矩阵中有成对的行是回文。

最佳答案

我只是检查数组是否等于它在所有元素中的反射(围绕轴 1),如果为真,则它是回文(如果我错了请纠正我)。然后我索引出不是回文的行。

import numpy as np

a = np.array([
    [1,0,0,1], # Palindrome
    [0,2,2,0], # Palindrome
    [1,2,3,4],
    [0,1,4,0],
])

wherepalindrome = (a == a[:,::-1]).all(1)
print(a[~wherepalindrome])
#[[1 2 3 4]
# [0 1 4 0]]

关于python - 在 2D numpy 数组中查找和删除回文行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67702694/

相关文章:

python - 如何使用 python 和 sqlite3 对非 ASCII 进行不区分大小写的查询?

python - 我可以将一个字符串拆分成一个嵌套列表,其中外部列表​​包含每个句子的列表,内部列表包含每个句子的单词吗?

python - Pandas Groupby 中过去 12 个月的唯一值

python - python3.4 的 numpy 矩阵字符串

python - 寻找最大正值或最小负值的向量化版本

python - 使用线性插值填充时间戳 NaT

python - 如何捕获所有 View 中的所有错误?

python - 来自变量的参数?

python - Pandas:按行划分多索引数据帧

python - 在 Pandas 中按行中的值过滤列