我的train_data的型別是 ' Array of unit 16 '。大小為(96108,7,7)。因此,有 96108 張影像。
影像與一般影像不同。我的影像有一個 7x7 的傳感器,49 個像素包含檢測到的燈光數量。一張影像是 0 到 1 秒內檢測到的光的數量。由于傳感器在單位時間內隨機檢測,因此像素的最大值都是不同的。
如果所有影像的最大值是 255,我可以做“訓練資料/255”,但我不能使用除法,因為我擁有的影像的最大值都是不同的。我想讓所有影像的像素值都為0到1,我該怎么辦?
uj5u.com熱心網友回復:
np.ndarray.max您可以跨多個軸收集最大值:此處axis=1和axis=2(即分別在每個影像上)。然后用它規范化初始陣列。為了避免自己廣播這個最大值陣列,您可以使用以下keepdims選項:
>>> x = np.random.rand(96108,7,7)
>>> x.max(axis=(1,2), keepdims=True).shape
(96108, 1, 1)
雖然x.max(axis=(1,2))單獨會回傳一個陣列形狀(96108,)......
這樣你就可以做到:
>>> x /= x.max(axis=(1,2), keepdims=True)
uj5u.com熱心網友回復:
import numpy as np
data = np.random.normal(loc=0, scale=1, size=(96108, 7, 7))
data_min = np.min(data, axis=(1,2), keepdims=True)
data_max = np.max(data, axis=(1,2), keepdims=True)
scaled_data = (data - data_min) / (data_max - data_min)
編輯:我投票支持另一個答案,因為這是一種更清潔的方式(在我看來),但原則是相同的。
編輯 v2:我看到了評論,我看到了不同之處。我將重寫我的代碼,使其“更干凈”,額外變數更少,但使用 min/max 仍然正確:
data -= data.min(axis=(1,2), keepdims=True)
data /= data.max(axis=(1,2), keepdims=True)
首先將最小值移動到零,然后可以取最大值以獲得特定影像的全范圍(max-min)。
這一步之后np.array_equal(data, scaled_data) = True。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/417564.html
標籤:
下一篇:如何從圖表影像中檢索資料點?
