PyTorch 相当于 numpy reshape 函数

您好,我有这些函数来展平我的复杂类型数据,将其提供给 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

我正在编写一个自定义损失,要求所有操作都在 torch 中,并且我应该在 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 阶重塑相同:


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


犯罪嫌疑人X
浏览 120回答 1
1回答

MMMHUHU

在 Numpy 和 PyTorch 中,您可以通过以下操作获得等效的结果:(a.T.reshape(shape[::-1]).T其中a是数组或张量):>>> a = np.arange(16).reshape(4, 4)>>> aarray([[ 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]).Tarray([[ 0,  8,  1,  9,  2, 10,  3, 11],       [ 4, 12,  5, 13,  6, 14,  7, 15]])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python