我與形狀從偶數列刪除行,如果某些值存在
(500,12)
所有我想要做的是檢查偶數列是否具有正值,例如numpy的陣列。 value > 0
。在這種情況下,我想刪除我的數組中的整個行。 我把這個了:
a = a[a[:,1] < 0, :]
這消除了需要的行,但看起來在第二列。我希望它檢查第4列第6列第8列等。
有沒有使用我的方法做到這一點的方法?
我與形狀從偶數列刪除行,如果某些值存在
(500,12)
所有我想要做的是檢查偶數列是否具有正值,例如numpy的陣列。 value > 0
。在這種情況下,我想刪除我的數組中的整個行。 我把這個了:
a = a[a[:,1] < 0, :]
這消除了需要的行,但看起來在第二列。我希望它檢查第4列第6列第8列等。
有沒有使用我的方法做到這一點的方法?
雖然也許不是最有效的方式,你可以使用的elementwise和&
所有行:
a = a[(a[:,1]<0)&(a[:,3]<0)&(a[:,5]<0)&(a[:,7]<0)&(a[:,9]<0)&(a[:,11]<0),:]
所以你屏蔽掉了其中存在偶數列,它是積極的所有項目。
您可以通過使用functools.reduce
使其更加優雅(與未成年人的性能損失):
from functools import reduce
a = a[reduce(lambda x,y:x&y,(a[:,i]<0 for i in range(1,12,2))),:]
萬一shape
事先不完全清楚,你可以使用.shape[1]
:
我可以但事情是我會有更多的列。所以即時尋求一個通用的解決方案。我實際上把它,它看起來像它的工作: 我在範圍內(1,12,2): a = a [a [:,i] <0,:] 你能看到這個問題嗎? –
@MatiMalik:我認爲編輯越過了你的評論。在語義上它是等價的。但我的猜測是,你會付出更高的性能損失,因爲你每次在進場時都會過濾陣列。 –
您的更新解決方案可能更簡化,謝謝!你也有建議,現在如何在偶數列中將所有負值轉換爲正值? –
沒有使用循環,沒有單一的命令可以幫助你動員自己。我建議循環所有的行,然後做這個。
比較通用的做法是建立一個列表理解與條件:
a = [row for row in a if all(row[j] <= 0 for j in range(0, len(row), 2))]
如果你正在處理NumPy的陣列,那麼你可以使用fancy indexing辦法(索引與整數數組序列的陣列)作爲所示:
mask = (a[:, np.arange(1, a.shape[1], 2)] < 0).all(axis=1)
out = a[mask]
說明:
要選擇其值要被比較奇數列的位置:
np.arange(1, a.shape[1], 2) # a.shape[1] gives the number of columns
# array([ 1, 3, 5, 7, 9, 11])
接下來我們子集中的陣列基於這些指數,看看這些列下的值都大於零較小通過提供axis=1
其執行列檢查並在刪除剩餘部分後返回包含減少行數的數組。
如果你不想要一個循環(因爲它反覆收縮你的數據框與一些相關的開銷):
m = (arr > 0) # check if positive; this is what you want to keep
m = arr.ix[:,1::2] # select only the even columns
m = arr.any(axis=1) # and check if any of them is true
所以在一條線:
arr[(arr > 0)[:,1::2].all(axis=1),:]
它不應該是'all'而不是'any'嗎? –
不完全確定,但評論似乎表明。改變了它。 – Roelant
不應該檢查是' <='? –
不清楚你定義的是哪些列和哪些行。你說「在這種情況下,我想刪除我的陣列中的整個行」,你的意思是整個專欄?你可能會考慮使用熊貓。 – Elmex80s
我的主陣列有500行和12列。然後我想要檢查每個偶數列是否包含正值。如果是這樣,該行應該從我的主數組中刪除,然後變成12行的499行。 –