簡體   English   中英

如何在沒有 for 循環的情況下將 3D 圖像矩陣轉換為二維矩陣? Python 和 numpy

[英]How to turn 3D image matrix to 2d matrix without a for loop? Python and numpy

目前在學校數據課程的實驗室工作。 我想要做的是將具有形狀(26,64,64)的matrix_a轉換為新的matrix_b(64,1664)。 matrix_a 中的 (64,64) 是組成一系列圖像的位,而 (64,1664) matrix_b 應該生成圖像條。 我嘗試使用 np.reshape,它確實正確地重塑了矩陣,但由於使用的排序,圖像丟失了。 我可以使用 for 循環將每個 64x64 圖像迭代地插入到 matrix_b 中,但他們要求您不要使用 for 循環。 他們提到了一些關於使用拼接的東西? 我在 python 和 numpy 中寫這個。 抱歉,如果這篇文章沒有意義,這是我的第一篇。 謝謝

使用 numpy,您可以試試這個(假設 data_3d 是您的 3d 陣列):

data_2d = data_3d.swapaxes(1,2).reshape(3,-1)
import numpy as np
arr = np.random.randint(10, size= [26,64,64])
arr.shape

>>> (26, 64, 64)

transpose()軸從[0, 1, 2]重新排序為[1, 0, 2]

arr = arr.transpose([1,0,2])   # edit suggested by @wwii 
arr.shape

>>> (64, 64, 26)
arr = arr.reshape([64, -1])
arr.shape

>>> (64, 1664)
>>> a = np.arange(2*2*3).reshape(3,2,2)
>>> a
array([[[ 0,  1],
        [ 2,  3]],

       [[ 4,  5],
        [ 6,  7]],

       [[ 8,  9],
        [10, 11]]])

連接每個圖像。

水平條 - 這是您在問題中要求的。

>>> np.concatenate(list(a),-1)
array([[ 0,  1,  4,  5,  8,  9],
       [ 2,  3,  6,  7, 10, 11]])

豎條

>>> np.concatenate(list(a),0)
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11]])
>>>

np.hstack(tuple(a))np.vstack(tuple(a))產生與concatenate相同的結果。

np.vsplit(a,a.shape[0])等價list(a)tuple(a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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