2013-11-28 94 views
0

這應該是一個標準的問題,但我無法找到答案:(如何將函數應用於numpy矩陣的所有列?

我有一個numpy的darray n個樣本(原材料)和對變量(觀察)。 我想每個有多少次算變量非0

我會用一個函數像

sum([1 for i in column if i!=0]) 

,但我怎麼能這個職位應用此功能,我的矩陣

+0

只是一個提示 - 'sum'支持生成器表達式。所以,你可以這樣做:'sum(1 for i in column in if if!= 0)'。實際上,如果你只有整數,你可以這樣做'sum(1 for i in column in if i)',因爲'0'的計算結果爲'False'。 – iCodez

回答

1

的所有列:How to apply numpy.linalg.norm to each row of a matrix?

如果操作支持axis,使用axis參數,它通常更快的是,

否則,np.apply_along_axis能有所幫助。

這是numpy.count_nonzero

因此,這裏的答案很簡單:

import numpy as np 

arr = np.eye(3) 
np.apply_along_axis(np.count_nonzero, 0, arr) 
+0

這對我的問題很有幫助。它是否也適用於lambda函數? – Donbeo

+0

@Donbeo我認爲,任何功能都可以使用。也許有一個嘗試。 – gongzhitaao

1

您可以使用np.sum在從原始陣列比較爲零,使用axis關鍵字參數指示是否要在行或算創造了一個布爾數組列。在你的情況下:

>>> a = np.array([[0, 1, 1, 0],[1, 1, 0, 0]]) 
>>> a 
array([[0, 1, 1, 0], 
     [1, 1, 0, 0]]) 
>>> np.sum(a != 0, axis=0) 
array([1, 2, 1, 0]) 
相關問題