2016-12-25 31 views
1

讓我們從簡單的例子開始:我有三列A,B,C的數組。我想附加列添加到數組:如何添加從其他列生成的多列 - numpy

  • A/B

  • 的A/C

  • B/C

這些新的列從舊的生成通過簡單的按元素劃分,除了對稱(例如B/A)之外,所有可能的組合都包括在內。對於少量初始色譜柱,手動操作很容易,但是如果我有20個起始色譜柱,那麼20 *(20-1)/ 2 = 190個新色譜柱......

如何以智能方式進行操作?

第二部分是如何使用用戶定義的功能,而不是除法,例如, A + B-A * B

你可以提供的任何幫助都很好。

+0

第二個問題:'平均(A,B)[i] ..'對我來說不是很清楚。你能否在那裏澄清一下,或者添加一個適用於較小數據集的工作代碼? – Divakar

+0

我在想是這樣,這樣的: 高清myDiv(X,Y): 返回X/Y ARR = np.random.ranf((5,4)) R,C = np.triu_indices( arr.shape [1],1) #arr [:,r]/arr [:,c] #new ratios newArr = myDiv(arr [:,r],arr [:,c]) –

+0

Please add to這個問題。很難從評論中閱讀。 – Divakar

回答

0

對於分割的問題,我們可以有在使用時的np.triu_indices生成那些列數的配對組合的通用解決方案,像所謂

from __future__ import division 

r,c = np.triu_indices(arr.shape[1],1) # pairwise column IDs 
out = arr[:,r]/arr[:,c] 

樣品運行

1)3列(驗證輸出值):

In [74]: arr = np.random.randint(11,99,(5,3)) #Sample input array with 3 cols 

In [75]: r,c = np.triu_indices(arr.shape[1],1) 

In [76]: arr[:,r]/arr[:,c] 
Out[76]: 
array([[ 1.85714286, 0.4875 , 0.2625 ], 
     [ 0.94565217, 0.92553191, 0.9787234 ], 
     [ 0.45652174, 0.24137931, 0.52873563], 
     [ 0.84931507, 0.69662921, 0.82022472], 
     [ 0.23170732, 0.52777778, 2.27777778]]) 

In [77]: arr[:,0]/arr[:,1] 
Out[77]: array([ 1.85714286, 0.94565217, 0.45652174, 0.84931507, 0.23170732]) 

In [78]: arr[:,0]/arr[:,2] 
Out[78]: array([ 0.4875 , 0.92553191, 0.24137931, 0.69662921, 0.52777778]) 

In [79]: arr[:,1]/arr[:,2] 
Out[79]: array([ 0.2625 , 0.9787234 , 0.52873563, 0.82022472, 2.27777778]) 

2)20列(驗證輸出):

In [71]: arr = np.random.randint(11,99,(5,20)) #Sample input array with 20 cols 

In [72]: r,c = np.triu_indices(arr.shape[1],1) 

In [73]: (arr[:,r]/arr[:,c]).shape # Verify output array shape 
Out[73]: (5, 190)