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