我有一個 numpy 陣列 - 具有各種值的影像:示例影像 = [1 ,2 ,2, 3, 4, 4, 4, 4, 5, 6, 6 ,7 ,8 ,8 ,8 ,8] 我想要只替換那些出現次數少于兩次的數字——用一個特定的數字,比如 0。我設法創建了這些數字的串列,如下所示:
(unique, counts) = np.unique(image, return_counts=True)
frequencies = np.asarray((unique, counts)).T
freq = frequencies[frequencies[:,1] < 2,0]
print(freq)
array([1, 3, 5, 7], dtype=int64)
如何用零替換這些數字?
結果應如下所示: [0 ,2 ,2, 0, 4, 4, 4, 4, 0, 6, 6 ,0 ,8 ,8 ,8 ,8]
提前致謝!
uj5u.com熱心網友回復:
如果這兩個image和freq是numpy的陣列:
freq = np.array([1, 3, 5, 7])
image = np.array([1 ,2 ,2, 3, 4, 4, 4, 4, 5, 6, 6 ,7 ,8 ,8 ,8 ,8])
方案一
然后您可以找到image出現在 中的條目的索引freq,然后將它們設定為零:
image[np.argwhere(np.isin(image, freq)).ravel()] = 0
基于:獲取 numpy 陣列中專案的索引,其中值在 list 中。
解決方案2
使用np.in1d:
image = np.where(np.in1d(image,freq),0,image)
更多資訊:Numpy - 檢查一個陣列的元素是否屬于另一個陣列
解決方案3
您還可以使用串列理解:
image = [each if each not in freq else 0 for each in image]
可以在這里找到更多資訊:if/else in a list comprehension。
最后一個將產生一個串列,而不是一個 numpy 陣列,但除此之外,所有這些都會產生相同的結果。
uj5u.com熱心網友回復:
您可以將每個專案與陣列的其余部分進行比較以形成一個二維矩陣并對每個計數求和。然后將滿足頻率條件的項賦值為期望值:
import numpy as np
img = np.array([1 ,2 ,2, 3, 4, 4, 4, 4, 5, 6, 6 ,7 ,8 ,8 ,8 ,8])
img[np.sum(img==img[:,None],axis=1)<2] = 0
array([0, 2, 2, 0, 4, 4, 4, 4, 0, 6, 6, 0, 8, 8, 8, 8])
可能不是很有效,但它應該可以作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/361511.html
