我有一个numpy的阵列,其看起来像选择从numpy的阵列的每一行的随机样品,不含负数
>>> a
array([[ 3. , 2. , -1. ],
[-1. , 0.1, 3. ],
[-1. , 2. , 3.5]])
我想选择从随机的每一行的值,但我想排除随机抽样中的-1值。
我目前做的是:
x=[]
for i in range(a.shape[0]):
idx=numpy.where(a[i,:]>0)[0]
idxr=random.sample(idx,1)[0]
xi=a[i,idxr]
x.append(xi)
,并得到
>>> x
[3.0, 3.0, 2.0]
这成为大型阵列的速度有点慢,我想知道是否有一种方法可以有条件地选择随机来自原始a
矩阵的值不分别处理每行。
我没有与任何NumPy的经验,但我也能猜到样本量生成一个随机数比从数组中访问数据花费的时间要长。追加到列表中也是如此。你有没有分析你的程序,以确保你正在优化正确的事情? – torak 2010-06-30 16:24:04
我已经对程序进行了剖析,'idx'和'idxr'这两行是最慢的,每次花费的时间几乎相等。 – fideli 2010-06-30 17:11:56
您是否总是希望在每一行中具有相同数量的排除值?如果是这样,你可以矢量化整个事情,并在没有python循环的两行代码中执行它... – 2010-06-30 22:18:56