排列矩阵的行和列

2023-12-09

假设我有以下矩阵/数组:

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

我想应用以下排列:

1 -> 5
2 -> 4

结果最终应该是:

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

现在,一种极其幼稚(并且内存昂贵)的方法可能是:

a2 = deepcopy(a1)
a2[0,:] = a1[4,:]
a2[4,:] = a1[0,:]
a = deepcopy(a2)
a2[:,0] = a[:,4]
a2[:,4] = a[:,0]

a3 = deepcopy(a2)
a2[1,:] = a3[3,:]
a2[3,:] = a3[1,:]
a = deepcopy(a2)
a2[:,1] = a[:,3]
a2[:,3] = a[:,1]

但是,我想知道是否有更有效的方法可以做到这一点。 numpy.shuffle 和 numpy.permutation 似乎只排列矩阵的行(而不是同时排列列)。这对我不起作用,因为矩阵是邻接矩阵(表示图),并且我需要进行排列,这将为我提供一个与原始图同构的图。此外,我需要进行任意数量的排列(不止一种)。

Thanks!


您可以使用以下命令在一行中执行交换整数数组索引:

a = np.array([[0, 0, 1, 1, 1],
              [0, 0, 1, 0, 1],
              [1, 1, 0, 1, 1],
              [1, 0, 1, 0, 0],
              [1, 1, 1, 0, 0]])
b = a.copy()

# map 0 -> 4 and 1 -> 3 (N.B. Python indexing starts at 0 rather than 1)
a[[4, 3, 0, 1]] = a[[0, 1, 4, 3]]

print(repr(a))
# array([[1, 1, 1, 0, 0],
#        [1, 0, 1, 0, 0],
#        [1, 1, 0, 1, 1],
#        [0, 0, 1, 0, 1],
#        [0, 0, 1, 1, 1]])

请注意,数组索引始终返回副本而不是视图 - 无法在不生成副本的情况下交换数组的任意行/列。


In this 特别的在这种情况下,您可以通过使用切片索引来避免复制,它返回一个视图而不是副本:

b = b[::-1] # invert the row order

print(repr(b))
# array([[1, 1, 1, 0, 0],
#        [1, 0, 1, 0, 0],
#        [1, 1, 0, 1, 1],
#        [0, 0, 1, 0, 1],
#        [0, 0, 1, 1, 1]])

Update:

您可以使用相同的索引方法来交换列。

c = np.arange(25).reshape(5, 5)
print(repr(c))
# array([[ 0,  1,  2,  3,  4],
#        [ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14],
#        [15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24]])

c[[0, 4], :] = c[[4, 0], :]     # swap row 0 with row 4...
c[:, [0, 4]] = c[:, [4, 0]]     # ...and column 0 with column 4

print(repr(c))

# array([[24, 21, 22, 23, 20],
#        [ 9,  6,  7,  8,  5],
#        [14, 11, 12, 13, 10],
#        [19, 16, 17, 18, 15],
#        [ 4,  1,  2,  3,  0]])

在这种情况下,我使用了不同的示例数组 - 您的版本在执行行/列交换后将产生相同的输出,这使得很难理解发生了什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排列矩阵的行和列 的相关文章

  • 有效地生成所有排列

    我需要尽快生成所有排列 https en wikipedia org wiki Permutation整数的0 1 2 n 1并得到结果作为NumPy https numpy org 形状数组 factorial n n 或者迭代此类数组的
  • 获取所有矩阵列逐元素乘积对的快速方法

    假设我有一个数字matrix set seed 1 mat lt matrix rnorm 1000 ncol 100 我想生成所有向量 它们是中所有唯一向量对的逐元素乘积的结果mat 我们如何改进下面的代码 all pairs lt t
  • matplotlib xkcd 无法在 Mac 上运行

    我在可视化 matplotlib xkcd 图时遇到小问题 通过简单地尝试执行上找到的示例matplotlib org http matplotlib org examples showcase xkcd html 当我执行 xkcd py
  • 在我的代码中使用 python 单词“type”安全吗?

    我可以用这个词吗type在我自己的代码中还是保留的 我的函数头 def get self region Delhi city Delhi category Apartments type For sale limit 60 PAGESIZE
  • 对 os.listdir 文件进行排序 Python

    如果已下载数年的数据 这些数据存储在具有以下命名约定的文件中 year day dat 例如 名为 2014 1 dat 的文件包含 2014 年 1 月 1 日的数据 我需要按天排序读取这些数据文件 2014 1 dat 2014 2 d
  • 如何找到排列的索引

    index List Idx Predicate will get List with permutation and I want to know index of permutation For example index 4 1 3
  • 将一维数组转换为下三角矩阵

    我想将一维数组转换为较低的零对角矩阵 同时保留所有数字 我知道numpy tril函数 但它用零替换了一些元素 我需要扩展矩阵以包含所有原始数字 例如 10 20 40 46 33 14 12 46 52 30 59 18 11 22 30
  • numpy:大量线段/点的快速规则间隔平均值

    我沿着一维线有许多 约 100 万个 不规则间隔的点 P 这些标记线段 这样 如果点是 0 x a x b x c x d 则线段从 0 gt x a x a gt x b x b gt x c x c gt x d 等 我还有每个段的 y
  • 在 scipy 中创建新的发行版

    我试图根据我拥有的一些数据创建一个分布 然后从该分布中随机抽取 这是我所拥有的 from scipy import stats import numpy def getDistribution data kernel stats gauss
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • 在 HDF5 (PyTables) 中存储 numpy 稀疏矩阵

    我在使用 PyTables 存储 numpy csr matrix 时遇到问题 我收到此错误 TypeError objects of type csr matrix are not supported in this context so
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 如何拆分二维数组,从“行到行”值创建数组

    我想这样分割二维数组 Example 从这个 4x4 2D 数组 np array 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 创建这四个 2x2 2D 数组 np array 1 2 3 4 np arr
  • Django Admin DateTimeField 显示 24 小时格式时间

    我尝试了谷歌 但没有找到解决方案 在Django管理端 我正在显示开始日期 and end date随着时间的推移 但时间已在24 hr格式 我想显示它12 hr format class CompanyEvent models Model
  • Python 2 的 `exceptions` 模块在 Python3 中丢失了,它的内容到哪里去了?

    一位朋友提到 对于 Python 2 假设您在命令行上的路径环境变量中有它 pydoc exceptions 非常有用 知道它应该可以为他每周节省几分钟的网络查找时间 我自己每周都会用谷歌搜索一次例外层次结构 所以这对我来说也是一个有用的提
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • iteritems 的优点是什么?

    我使用的是 Python 2 7 5 Mac OS X 10 9 3 具有 8GB 内存和 1 7GHz Core i5 我测试了如下的时间消耗 d i i 2 for i in xrange 10 7 3 WARNING it takes
  • NumPy linalg.eig

    我有这个烦人的问题 但我还没有弄清楚 我有一个矩阵 我想找到特征向量 所以我写 val vec np linalg eig mymatrix 然后我得到了 vec 我的问题是 当我小组中的其他人对相同的矩阵 mymatrix 做同样的事情时
  • 在Python中如何获取字典的部分视图?

    是否有可能获得部分视图dict在Python中类似于pandasdf tail df head 说你有很长一段时间dict 而您只想检查某些元素 开头 结尾等 dict 就像是 dict head 3 To see the first 3
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想

随机推荐

  • Google Drive API:如何在 appDataFolder 中创建文件?

    我正在阅读这个文档 https developers google com drive api v3 appdata 这是我的代码 var fileMetadata name config json parents appDataFolde
  • 如何允许列表append()方法返回新列表

    我想做这样的事情 myList 10 20 30 yourList myList append 40 不幸的是 列表追加不会返回修改后的列表 那么 我怎样才能允许append返回新列表 See also Why do these list
  • 不使用 coreLocation 框架的 iPhone 位置

    我需要在不使用 coreLocation 框架的情况下获取 iphone 位置 有没有什么解决办法呢 等待你的回复 提前致谢 使用私有 API 和lot努力程度 是的 在实践中 没有
  • 如何通过 pandas 0.19.2 中其他行的唯一对来标记行

    我有一个数据框df像这样但更大 ID 0 ID 1 location 0 a b 1 1 a c 1 2 a b 0 3 d c 0 4 a c 0 5 a c 1 我想添加一个列来标识前两个 例如 ID 0 ID 1 location g
  • 如何使用锚标记下载文件

    为什么这不起作用 下载 html a href jsplogin jar download a The jsplogin jar文件位于同一文件夹中download html file 当我单击下载链接时jsplogin jar应该下载 但
  • Google 电子钱包服务器是否会对每次订阅续订进行回调?

    我有一个使用订阅 API 的钱包集成 Web 产品 如 中所述文档 模拟了首次付款和取消 一切正常 Google 电子钱包服务器是否会在每次定期续订时调用服务器 显然客户端当时可能不在线 定期付款自动发生 无需回调至商家服务器 处理定期付款
  • 设置 UILabel 行距

    如何修改多行中的行间距 行距 UILabel Edit 显然NSAttributedString在 iOS 6 及更高版本上可以做到这一点 而不是使用NSString要设置标签的文本 请创建一个NSAttributedString 为其设置
  • 将自定义对象从 JList 拖放到 JLabel 中

    我有一个包含自定义对象 ArrayList 的 JList 并且我正在尝试创建拖放到字段中的操作 我无法理解如何打包和接收 Transferable 中的对象 据我所知 这大约是 import java awt import java aw
  • 计算 SQL Server 中不包括重叠时间和中断的总时间

    从选择查询的开始时间和结束时间列表中 我需要找出不包括重叠时间和休息时间的总时间 StartTime EndTime 2014 10 01 10 30 00 000 2014 10 01 12 00 00 000 90 mins 2014
  • 来自多个变量的 Pivot_wider 函数(tidyr r 包)

    我想将数据框置于宽格式中 考虑两个变量作为标准 甚至可能是不必要的 但我对此发表评论是因为原始 df 是 480 行和几个子级别 这是返回一个错误 library tidyr library dplyr df lt structure li
  • 如何在 JavaFX css 中将 -fx-max-width 设置为 USE_PREF_SIZE?

    我正在编写一个 JavaFX 8 应用程序 想知道是否可以将 例如 按钮的最小或最大宽度设置为USE PREF SIZE通过CSS 班上Region定义USE PREF SIZE as Double NEGATIVE INFINITY 但是
  • 如何迭代(键,值)boost::python:dict

    我怎样才能迭代C 在我的升压 python 字典 我需要key and value在每个循环中 我的尝试是这样的 for auto x MyBoostPythonDict iteritems determine key determine
  • SQLSTATE[HY093]:参数号无效[重复]

    这个问题在这里已经有答案了 我在执行搜索查询时遇到一些问题 我收到这个错误 SQLSTATE HY093 参数号无效 这是我的代码
  • 执行 R 脚本时 MS-SQL 服务器中的“无效 BXL 流”

    我正在将 R 脚本作为 ms sql 存储过程执行 我正在尝试使用 geosphere 包 但是当我执行存储过程时 出现错误 无效的 BXL 流 并且执行停止 该软件包已安装在计算机上 只需加载该软件包就会导致此错误 即library ge
  • 复制链表C中的节点

    我正在尝试复制链表中的节点 我不确定我是否做得正确 我尝试制作测试用例 但没有成功 如果有人可以告诉我哪里出了问题以及我做对了什么 以及测试我的代码的最佳方法是什么 struct node int id char side int quan
  • 如何检查 SymPy 表达式是否具有解析积分

    我想解决我的另一个问题here因此 每当 和 积分没有解析 符号解时 我需要 sympy 返回错误 例如 如果我尝试 from sympy import init printing use unicode False wrap line F
  • 如何从 Excel 的数据列中删除字符

    我正在格式化收到的一些数据 我在 A 列中有几百个学生的名字 由于某种奇怪的原因 有一个随机的 随机放置在名称中 我想以编程方式删除所有 所有名字中的字符 For x 2 To 300 Dim strStudent as String ho
  • 如何将外部自定义 URL 添加到 woocommerce 端点

    我想将自定义端点 URL 添加到 woocommerce 上的我的帐户页面 是否可以 因此 当客户点击此链接时 他们将重定向到我的 YouTube 页面 function custom wc end point if class exist
  • 将段落拆分成句子

    我有一大堆文字 例如 我想将一个段落分成句子 但有一个问题 我的段落包括诸如 Jan 13 2014 之类的日期 诸如 U A E 之类的单词以及诸如 2 2 之类的数字 我该如何分割这个 Output I want to split a
  • 排列矩阵的行和列

    假设我有以下矩阵 数组 array 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 0 0 我想应用以下排列 1 gt 5 2 gt 4 结果最终应该是 array 1 1 1 0 0 1 0 1