#!/usr/bin/python
import numpy as np
#Define a two-dimensional array
#Use any number of dimensions, and dimensions of any size
d=numpy.zeros(30).reshape((5,6))
#Get a list of indices for an array of this shape
indices=list(np.ndindex(d.shape))
#Shuffle the indices in-place
np.random.shuffle(indices)
#Access array elements using the indices to do cool stuff
for i in indices:
d[i]=5
print d
所有这些答案对我来说都有点复杂。
我假设您有一个多维数组,您希望从中生成一个索引的详尽列表。您希望对这些索引进行无序排列,这样就可以按随机顺序访问每个数组元素。
以下代码将以简单而直接的方式执行此操作:
打印
d
已验证所有元素都已被访问。请注意,数组可以有任意数量的维度,维度可以是任意大小。
这种方法的唯一缺点是,如果
d
很大,那么indices
可能会变得相当大。因此,最好有一个生成器。遗憾的是,我无法独立地考虑如何构建一个经过洗牌的迭代器。从@WoLpH扩展好的答案
对于一个2D数组,我认为它将取决于你想知道或需要知道什么样的索引。
你可以这样做:
或
然后,可以使用列表
idx
在任意顺序的2D数组索引上迭代,并从保持不变的data
中获取该索引处的值。注意:您也可以通过
itertools.product
生成随机顺序的索引,以防您对这组工具更熟悉。如果仍然需要原始数组,那么使用
numpy.random.shuffle
或numpy.random.permutation
怎么样?如果需要就地更改数组,则可以创建如下索引数组:
相关问题 更多 >
编程相关推荐