作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从矩阵中查找/删除回文行的 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/
我是一名优秀的程序员,十分优秀!