這應該是一個標準的問題,但我無法找到答案:(如何將函數應用於numpy矩陣的所有列?
我有一個numpy的darray n個樣本(原材料)和對變量(觀察)。 我想每個有多少次算變量非0
我會用一個函數像
sum([1 for i in column if i!=0])
,但我怎麼能這個職位應用此功能,我的矩陣
這應該是一個標準的問題,但我無法找到答案:(如何將函數應用於numpy矩陣的所有列?
我有一個numpy的darray n個樣本(原材料)和對變量(觀察)。 我想每個有多少次算變量非0
我會用一個函數像
sum([1 for i in column if i!=0])
,但我怎麼能這個職位應用此功能,我的矩陣
的所有列:How to apply numpy.linalg.norm to each row of a matrix?
如果操作支持axis
,使用axis
參數,它通常更快的是,
否則,np.apply_along_axis
能有所幫助。
因此,這裏的答案很簡單:
import numpy as np
arr = np.eye(3)
np.apply_along_axis(np.count_nonzero, 0, arr)
這對我的問題很有幫助。它是否也適用於lambda函數? – Donbeo
@Donbeo我認爲,任何功能都可以使用。也許有一個嘗試。 – gongzhitaao
您可以使用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])
只是一個提示 - 'sum'支持生成器表達式。所以,你可以這樣做:'sum(1 for i in column in if if!= 0)'。實際上,如果你只有整數,你可以這樣做'sum(1 for i in column in if i)',因爲'0'的計算結果爲'False'。 – iCodez