2013-12-16 78 views
1
self.x = np.array([np.random.uniform(-5, 5) for _ in xrange(100)]) 
v = np.array([np.random.uniform(-5, 5) for _ in xrange(100)]) 
good = np.random.uniform(0,1,5) < 0.5 
good = good.reshape(1,self.x.shape[1]) 
self.x[good] = v[good] 
u = self.x[good] 

讓我們假設good[False True True True True]比較兩個numpy的數組。 u向量丟棄第一個值爲False的值,其餘值被替換爲True。但我希望它保持self.x如何根據真實和虛假陳述

+2

這是您的實際代碼?由於x是一維的,所以它給出了一個錯誤。 IndexError:元組索引超出範圍,位於x.shape [1]。 – M4rtini

+1

請注意,寫'self.x = np.random.uniform(-5,5,size = 100)'通常會更好:更短,更易讀,更快。 – DSM

回答

1

像你想xv保持不變,這聽起來我前值,但有第三個向量u這是v無論goodTrue,但x其他地方?爲此,您可以使用功能np.where

下面是一個例子:

x = np.arange(1,6) 
v = 10*x 
good = np.array([False, True, True, True, True]) 

In [690]: x 
Out[690]: array([1, 2, 3, 4, 5]) 

In [691]: v 
Out[691]: array([10, 20, 30, 40, 50]) 

In [692]: good 
Out[692]: array([False, True, True, True, True], dtype=bool) 

In [693]: u = np.where(good, v, x) 

In [694]: u 
Out[694]: array([ 1, 20, 30, 40, 50]) 

In [695]: x 
Out[695]: array([1, 2, 3, 4, 5]) 

In [696]: v 
Out[696]: array([10, 20, 30, 40, 50]) 
+0

謝謝你它的工作 – user2374431

+0

不客氣@ user2374431,隨時選擇我的答案與綠色複選標記,以表明您對解決方案感到滿意。 – askewchan