編輯我在下面保留我的原始答案,但在相同主題上深入探討您的上一個問題,請遵循您所遵循的內容。請注意,它不處理重複的值,因此如果將多個值分配給同一位置,則只會保留其中一個值。此外,這會弄亂散點圖的規模,所以像我原來的答案可能更適合你的後續工作。但無論如何,下面的代碼:
x_, x_idx = np.unique(np.ravel(dataX), return_inverse=True)
y_, y_idx = np.unique(np.ravel(dataY), return_inverse=True)
newArray = np.zeros((len(x_), len(y_)), dtype=dataMag.dtype)
newArray[x_idx, y_idx] = np.ravel(dataMag)
>>> newArray
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0],
[ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0],
[ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0],
[ 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
原來的答案
如果dataX
和dataY
其中兩個整數數組,實現起來是非常簡單的。但是,因爲它們似乎不一定是,所以您需要做一些舍入操作,爲此您需要首先在每個方向上爲陣列選擇一個步長,然後可以執行下列操作:
from __future__ import division
x_step, y_step = 25, 0.10
x = np.round(dataX/x_step).astype(int)
y = np.round(dataY/y_step).astype(int)
x_m, x_M = np.min(x), np.max(x)
y_m, y_M = np.min(y), np.max(y)
newArray = np.zeros((x_M - x_m + 1, y_M - y_m + 1), dtype=dataMag.dtype)
newArray[x - x_m, y - y_m] = dataMag
>>> newArray
array([[ 22, 0, 0, 0, 0, 0, 0, 0, 777, 0, 0],
[ 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0],
[ 9, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 29, 0, 0, 0, 0, 0],
[ 5, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 26, 0, 0, 0, 14, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0],
[ 0, 0, 0, 0, 0, 10, 0, 11, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 4, 0, 0, 0, 0, 16, 25, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
當你這樣做時,你必須小心謹慎,確保你的舍入步驟足夠小,以避免數組中的相同位置沒有兩個值,因爲那樣會丟失信息。例如:
x_step, y_step = 50, 0.10
...
>>> newArray
array([[ 22, 0, 0, 0, 9, 0, 0, 0, 777, 0, 0],
[ 9, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0],
[ 0, 19, 0, 0, 0, 29, 0, 0, 0, 0, 0],
[ 5, 0, 26, 0, 0, 0, 14, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9],
[ 0, 0, 0, 0, 0, 10, 0, 0, 13, 0, 0],
[ 0, 0, 0, 0, 0, 0, 16, 11, 0, 0, 0],
[ 0, 4, 0, 0, 0, 0, 0, 25, 0, 0, 0],
[ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0],
[ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
和[3, 2]
位置只有一個圖26示出,而不是在前面的例子中的相應的細胞中的18和26向上。
你想要那個數組的結構是什麼?你是說你想要一個1s的二維數組,哪裏會有點和0點,哪裏沒有點,或什麼? – BrenBarn
我不明白你想如何將這三個數組轉換成單個二維數組,但你可以很容易地獲得一個3d數組。考慮你的數組命名爲'mag','x'和'y',那麼'allthem = dstack((x.ravel(),y.ravel(),mag.ravel()))'和'scatter(x = allthem [...,0],y = allthem [...,1],c = allthem [...,2])'。 – mmgp
它將是一個數組,如'NewArray',每個軸'[i,j]'是來自'dataX'的有序點,'dataY'由來自'dataMag'的相應量值構成。 [這裏](http://stackoverflow.com/questions/14085169/numpy-fast-re-map-3d-scatterplot-into-a-2d-array-given-the-xy-arrays)'視覺(也問由我無濟於事)。 –