2014-02-19 90 views
2

假設我有一個二進制矩陣。我想將該矩陣轉換爲另一個矩陣,其中每行都有單個矩陣,並且該矩陣的索引對於每行都是隨機的。從二進制numpy矩陣的每一行中選擇隨機的一個?

例如,如果其中一行是[0,1,0,1,0,0,1],我將它轉換爲[0,0,0,1,0,0,0],我們隨機選擇1的索引。

我怎麼能在numpy中做到這一點?

目前我發現每行的最大值(因爲max函數返回一個索引)並將其設置爲零。它適用於所有行最多有2個,但如果超過2個則失敗。

+1

爲什麼「Matlab」標籤?你也想在Matlab中得到答案嗎? –

回答

3

擴展@ zhangxaochen的答案,給出一個隨機二進制數組

x = np.random.random_integers(0, 1, (8, 8)) 

可以填充另一個用隨機抽取的1個從x

y = np.zeros_like(x) 
ind = [np.random.choice(np.where(row)[0]) for row in x] 
y[range(x.shape[0]), ind] = 1 
2

我想使用np.argsort得到非零元素的索引:

In [351]: a=np.array([0,1,0,1,0,0,1]) 

In [352]: from random import choice 
    ...: idx=choice(np.where(a)[0]) #or np.nonzero instead of np.where 

In [353]: b=np.zeros_like(a) 
    ...: b[idx]=1 
    ...: b 
Out[353]: array([0, 1, 0, 0, 0, 0, 0]) 
+0

你可以用'np.where(a)[0]'替換'a.argsort()[ - np.count_nonzero(a):]'。 –

+0

@BiRico對那個醜陋的代碼感到抱歉。編輯:) – zhangxaochen

相關問題