我有一个名为weights
的二维数组,形状(npts,nweights)。对于weights
的每个列,我希望随机洗牌这些行。我想重复这个过程num_shuffles
次,并将洗牌的集合存储到一个名为weights_matrix
的3d数组中。重要的是,对于每个洗牌迭代,weights
的每一列的洗牌索引应该是相同的。你知道吗
下面是该算法的显式简单的双for循环实现。有没有可能避免python循环并在纯Numpy中生成weights_matrix
?你知道吗
import numpy as np
npts, nweights = 5, 2
weights = np.random.rand(npts*nweights).reshape((npts, nweights))
num_shuffles = 3
weights_matrix = np.zeros((num_shuffles, npts, nweights))
for i in range(num_shuffles):
indx = np.random.choice(np.arange(npts), npts, replace=False)
for j in range(nweights):
weights_matrix[i, :, j] = weights[indx, j]
这是一个向量化的解决方案,其思想是从^{} 借用的-
样本运行-
您可以先用原始权重的副本填充三维数组,然后对该三维数组的切片执行简单的迭代,使用
numpy.random.shuffle
将每个二维切片洗牌到位。你知道吗这只是说“我想随机地重新排列二维数组的行”的另一种方式。
numpy.random.shuffle
是random.shuffle
的一个支持numpy数组的版本:它将对容器的元素进行适当的重新排序。这就是你所需要的,因为二维numpy数组的“元素”,在这个意义上,就是它的行。你知道吗相关问题 更多 >
编程相关推荐