当前位置: 首页 > 面试题库 >

重新排列numpy 2D数组的列

江阳冰
2023-03-14
问题内容

有没有办法将numpy 2D数组中的列顺序更改为新的任意顺序?例如,我有一个数组

array([[10, 20, 30, 40, 50],
       [ 6,  7,  8,  9, 10]])

我想将其更改为

array([[10, 30, 50, 40, 20],
       [ 6,  8, 10,  9,  7]])

通过应用排列

0 -> 0
1 -> 4
2 -> 1
3 -> 3
4 -> 2

在列上。因此,在新矩阵中,我希望将原始文档的第一列保留在原位置,将第二列移至最后一列,依此类推。

有一个numpy函数可以做到吗?我有一个相当大的矩阵,并且希望得到更大的矩阵,因此我需要一个可以在可能的情况下快速且适当地执行此操作的解决方案(置换矩阵是不可行的)

谢谢。


问题答案:

使用花式索引可以在 O(n) 时间和 O(n) 空间中实现:

>>> import numpy as np
>>> a = np.array([[10, 20, 30, 40, 50],
...               [ 6,  7,  8,  9, 10]])
>>> permutation = [0, 4, 1, 3, 2]
>>> idx = np.empty_like(permutation)
>>> idx[permutation] = np.arange(len(permutation))
>>> a[:, idx]  # return a rearranged copy
array([[10, 30, 50, 40, 20],
       [ 6,  8, 10,  9,  7]])
>>> a[:] = a[:, idx]  # in-place modification of a

请注意,a[:, idx]它返回的是副本,而不是视图。的
O(1) k-空间的解决方案是不可能的在一般情况下,由于如何numpy的阵列在内存中跨距。



 类似资料:
  • 问题内容: 我有一个4d numpy数组,该数组代表具有3d实例的数据集。可以说数组的形状是。 如何将数组的形状更改为? -–问题更新似乎rollaxis和transpose都能解决问题。 感谢您的回复! 问题答案: 该函数完全可以实现您想要的功能,您可以传递轴参数来控制要交换的轴: b的轴是a的轴的置换版本:b的轴0是a的第3轴,b的轴1是a的第0轴,依此类推… 这样,您可以在第二或第三位指定要

  • 问题内容: 我有一个当前订购的月份名称数组,例如(“ April”,“ August”,“ February”)等。我想对该列表进行重新排序,使其处于正常的月份顺序,例如(“ January”,“二月三月”) 该数组是从SHOW TABLES sql查询中填充的,不幸的是,SHOW TABLES没有ORDER BY参数,因此我认为最好的选择是将它们添加到数组中并重新排序该数组以获取所需的内容。 问

  • 我是Python的业余爱好者,我制作了一个程序,可以对长字符串进行编码并输出6个字符。 标记将数字(n)转换为字符。大写和小写字母,包括“-”和“”字符。 这是编码的其余部分。 同样,是否有方法为输出的六个字符创建顺序? 这是我到目前为止所拥有的。我从一个现有的问题中得到了这个。 如何在python中重新排序列表? 但是...它给了我这个: 我想发生的事: 我对这个完全陌生。请帮助:)

  • 问题内容: 我在python / pyspark中有一个带有列的数据框 ,依此类推...... 现在,我在此数据框中添加了新列。 现在,我必须安排这样的列的列来后 我已经完成如下 我收到此错误 为什么会发生此错误。我该如何纠正。 问题答案: 您可以用来更改列的顺序:

  • 问题内容: 该站点上有一些类似的问题也有所帮助,但是我不能完全弄清楚这个问题,所以我希望这不是重复的。 这是一项家庭作业,其中您具有一组字符[A,B,C],并且必须使用递归来获取所有排列(重复)。我具有的代码可以做到这一点: 但是,参数n应该定义输出的长度,因此,尽管此函数打印出长度为3的所有排列,但不能显示长度为2的排列。我已经尝试了所有可以想到的内容,并仔细研究了Google搜索结果,由于无法