python - numpy - 使用 numpy 一维数组的置换副本构建二维数组的最快方法

标签 python arrays numpy scipy permutation

>>> import numpy as np
>>> a = np.arange(5)
>>> b = desired_function(a, 4)
array([[0, 3, 4, 1],
...    [1, 2, 1, 3],
...    [2, 4, 2, 4],
...    [3, 1, 3, 0],
...    [4, 0, 0, 2]])

到目前为止我尝试了什么

def repeat_and_shuffle(a, ncols):
    nrows, = a.shape
    m = np.tile(a.reshape(nrows, 1), (1, ncols))
    return m

我必须以某种方式有效地按列随机播放 m[:,1:ncols]

最佳答案

这是创建这样一个数组的一种方法:

>>> a = np.arange(5)
>>> perms = np.argsort(np.random.rand(a.shape[0], 3), axis=0) # 3 columns
>>> np.hstack((a[:,np.newaxis], a[perms]))
array([[0, 3, 1, 4],
       [1, 2, 3, 0],
       [2, 1, 4, 1],
       [3, 4, 0, 3],
       [4, 0, 2, 2]])

这将创建一个所需形状的随机值数组,然后按对应值对每列中的索引进行排序。这个索引数组然后用于索引 a

(使用 np.argsort 创建置换索引列数组的想法来自@jme 的回答 here。)

关于python - numpy - 使用 numpy 一维数组的置换副本构建二维数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732111/

相关文章:

python - 实时统计分析

python - 代码自动完成 'partially' 在 Spyder3 的编辑器 Pane 中工作

python - 通过 matplotlib 在 2 y 轴上使用散点图

java - 交换相对行/列中所有整数或字符的二维数组

c++ - 数组作为函数中的地址常量

arrays - 通过函数传递全局数组在 swift 中不起作用

python - 如何在 python 中编写/创建 GeoTIFF RGB 图像文件?

python - 有没有办法让numpy矩阵来存储对象?

python - 如何循环一个乏味​​的 if 语句

python - 使用不同的参数调用 API 每次都会返回相同的数据