我的輸入是一組 N 2D 坐標,形式為 numpy 陣列,例如:
import numpy as np
import matplotlib.pyplot as plt
X = np.array([
[-5, 1],
[3, 7.2],
[0, -7],
[9, -8],
[0, 0.1]
])
這里 N 是 5 個坐標。
我們可以將每個點系結到 2D 欄位上的某個resolutionX resultion2D 網格引數,我們知道兩個維度的min_X和max_X:
resultion = 100
min_X = -10
max_X = 10
bins = np.linspace(min_X, max_X, resolution 1)
X_binned = np.digitize(X, bins) - 1
X_binned
array([[25, 55], [65, 86], [50, 15], [95, 10], [50, 50]], dtype=int64)
因此,例如,我們在 [-10,10] X [-10,10] 欄位上有一個 100 X 100 的網格,點 (-5, 1) 映射到單元格 (25,55)。
現在我想要一組二維全零網格,以N X resolution X resolution X 1numpy 陣列(或一組“影像”)的形式。對于每個網格 i,坐標 i 位置應該出現 1。
這就是我正在做的,但它似乎不是很 numpy-y,復雜度是 O(N)(N 最終將在 100K 左右):
X_images = np.zeros((X.shape[0], resolution, resolution, 1), dtype=np.uint8)
for i, (j, k) in enumerate(X_binned):
X_images[i, resolution - 1 - k, j, 0] = 1
為了顯示它的作業原理,請參見例如第一個點 (-5, 1),它映射到它應該在X_images[0]網格/影像上的位置:
plt.imshow(X_images[0])
plt.show()

那么有沒有更好的方法,如果不是更高效更優雅?
uj5u.com熱心網友回復:
X_images您可以通過使用行和列的串列索引來一次設定它們:
X_images = np.zeros((X.shape[0], resolution, resolution, 1), dtype=np.uint8)
i = np.arange(X.shape[0])
j = X_binned[:, 0]
k = resolution - 1 - X_binned[:, 1]
X_images[i, k, j] = 1
uj5u.com熱心網友回復:
使用np.ix_()使這非常簡單:
X_images = np.zeros((X_binned.shape[0], 100, 100, 1), dtype="uint8")
X_images[np.ix_(np.arange(N), *X_binned.T, [0])] = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453061.html
