python - 根据其内容交换 numpy 二维数组中的数组
问题描述
我有一个 numpy 数组
a = ([[1,2,3],
[2,2,2],
[1,5,3],
[3,3,1]])
swap1 = [2,2,2]
swap2 = [3,3,1]
我想在不知道这 2 行的索引的情况下交换等于 swap1 和 swap2 的行。我希望输出看起来像这样
Out = ([[1,2,3],
[3,3,1],
[1,5,3],
[2,2,2]])
最好的方法是什么?如果可以的话,我想避免循环。谢谢!
解决方案
>>> a = np.array([[1,2,3],
[2,2,2],
[1,5,3],
[3,3,1]])
>>> x = [2,2,2]
>>> y = [3,3,1]
制作您感兴趣的行的布尔数组
>>> xmask = np.all(a==x,axis=1)
>>> ymask = np.all(a==y,axis=1)
>>> xmask
array([False, True, False, False])
>>> ymask
array([False, False, False, True])
然后使用它们来更改值
>>> a[xmask] = y
>>> a[ymask] = x
>>> a
array([[1, 2, 3],
[3, 3, 1],
[1, 5, 3],
[2, 2, 2]])
>>>
如果数组是正方形
>>> a = np.array([[1,2,3,4],
[2,2,2,9],
[1,5,3,1],
[3,3,1,8]])
>>> y = [3,3,1,8]
>>> x = [2,2,2,9]
>>> xmask = np.all(a==x,axis=1)
>>> ymask = np.all(a==y,axis=1)
>>> a[xmask,:] = y
>>> a[ymask,:] = x
推荐阅读
- python - Python3:可以使用“self”以外的方法作为方法的第一个参数吗?
- html - 在 css 中,我们如何固定具有属性的 div 的宽度(完全 100% 不在 px 中)是位置固定的
- excel - 阻止excel将公式结果格式化为日期
- python - 在 Python 中推送和弹出列表的最有效方法是什么?
- tomcat - 重定向到其他域后 Cookie 丢失
- php - CodeIgniter 中不存在图像返回 200 Ok
- xml - 解析 XML 仅返回第一个元素
- sql - 在 postgres 数组中查找值(有些必须在,有些不能在同一个查询中)
- javascript - 在 ReactJs 中复制到剪贴板不适用于弹出窗口/模式
- javascript - 如何根据javascript中的值获取匹配的数组对象