[英]Trouble reshaping 3-d NumPy array into 2-d NumPy array
我正在處理圖像處理問題,我的數據顯示為3維NumPy數組,其中(x,y,z)項是圖像z的(x,y)像素(數值強度值) 。 有100000張圖像,每個圖像為25x25。 因此,數據矩陣的大小為25x25x10000。 我正在嘗試將其轉換為大小為10000x625的二維矩陣,其中每一行都是圖像中像素的線性化。 例如,假設圖像是3x3,我們將具有以下內容:
1 2 3
4 5 6 ------> [1, 2, 3, 4, 5, 6, 7, 8, 9]
7 8 9
我試圖通過調用data.reshape((10000, 625))
來做到這一點,但是這樣做之后數據不再正確對齊。 我曾嘗試在重塑的有效階段對矩陣進行轉置,但這似乎無法解決。
有誰知道如何解決這一問題?
如果要對齊數據,則需要執行data.reshape((625, 10000))
。
如果您想要其他布局,請嘗試np.rollaxis
:
data_rolled = np.rollaxis(data, 2, 0) # This is Shape (10000, 25, 25)
data_reshaped = data_rolled.reshape(10000, 625) # Now you can do your reshape.
Numpy需要您在重塑期間知道哪些元素屬於一起,因此僅“合並”屬於一起的維度。
問題在於您在reshape
調用中沒有遵守標准索引順序。 僅當要合並的兩個維度在新數組中的相同位置( (25, 25, 10000)
-> (625, 10000)
)時(625, 10000)
數據才會對齊。
然后,要獲得所需的形狀,可以進行轉置。 通過較小的示例可以更輕松地實現可視化-遇到此類問題時,請盡可能在REPL中嘗試較小的示例。
>>> a = numpy.arange(12)
>>> a = a.reshape(2, 2, 3)
>>> a
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
>>> a.reshape(4, 3)
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
>>> a.reshape(4, 3).T
array([[ 0, 3, 6, 9],
[ 1, 4, 7, 10],
[ 2, 5, 8, 11]])
無需rollaxis
!
注意numpy
使用的打印布局如何使這種推理更容易。 第一步和第二步之間的區別僅在於括號位置; 這些數字都位於同一位置,這在您需要考慮形狀問題時通常會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.