簡體   English   中英

無法將3維NumPy數組重塑為2維NumPy數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM