簡體   English   中英

PyTorch 相當於 numpy reshape 函數

[英]PyTorch equivalent of numpy reshape function

嗨,我有這些函數來展平我的復雜類型數據,以將其提供給 NN 並將 NN 預測重建為原始形式。

def flatten_input64(Input): #convert (:,4,4,2) complex matrix to (:,64) real vector
  Input1 = Input.reshape(-1, 32, order='F')
  Input_vector=np.zeros([19957,64],dtype = np.float64)
  Input_vector[:,0:32] = Input1.real
  Input_vector[:,32:64] = Input1.imag
  return Input_vector

def convert_output64(Output): #convert (:,64) real vector to (:,4,4,2) complex matrix  
  Output1 = Output[:,0:32] + 1j * Output[:,32:64]
  output_matrix = Output1.reshape(-1, 4 ,4 ,2 , order = 'F')
  return output_matrix

我正在編寫一個定制的損失,要求所有操作都在火炬中進行,我應該在 PyTorch 中重寫我的轉換函數。 問題是 PyTorch 沒有“F”順序重塑。 我嘗試編寫自己的 F reorder 版本,但是沒有用。 你知道我的錯誤是什么嗎?

def convert_output64_torch(input):
   # number_of_samples = defined
   for i in range(0, number_of_samples):
     Output1 = input[i,0:32] + 1j * input[i,32:64]
     Output2 = Output1.view(-1,4,4,2).permute(3,2,1,0)
   if i == 0:
     Output3 = Output2
   else:
     Output3 = torch.cat((Output3, Output2),0)
return Output3

更新:在@a_guest 評論之后,我嘗試使用轉置和重塑重新創建我的矩陣,並且此代碼的​​工作方式與 numy 中的 F order reshape 相同:

def convert_output64_torch(input):
   Output1 = input[:,0:32] + 1j * input[:,32:64]
   shape = (-1 , 4 , 4 , 2)
   Output3 = torch.transpose(torch.transpose(torch.reshape(torch.transpose(Output1,0,1),shape[::-1]),1,2),0,3)
return Output3

在 Numpy 和 PyTorch 中,您可以通過以下操作獲得等效項: aTreshape(shape[::-1]).T (其中a是數組或張量):

>>> a = np.arange(16).reshape(4, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> shape = (2, 8)
>>> a.reshape(shape, order='F')
array([[ 0,  8,  1,  9,  2, 10,  3, 11],
       [ 4, 12,  5, 13,  6, 14,  7, 15]])
>>> a.T.reshape(shape[::-1]).T
array([[ 0,  8,  1,  9,  2, 10,  3, 11],
       [ 4, 12,  5, 13,  6, 14,  7, 15]])

暫無
暫無

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

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