torch.reshapeとnp.reshapeの詳しい説明

ハイパーリンク: 深層学習作業、行列次元の変更、写真、ビデオ、その他の操作 (torch、numpy、opencv など) に一般的に使用されるメソッドの概要


1. トーチ.リシェイプ、np.リシェイプ

トーチバージョン

x.reshape()

機能: 対応する次元でテンソルを変更します。

注: 変更された形状は、元のテンソルと形状変更テンソルの同じ数の要素を満たす必要があります。たとえば、元のテンソルの形状は (2, 2, 3) で、要素の数は 12 です。その場合、形状変更は、(4, 3, 1)、(3, 2, 2) などの要素の数 12 を満たす必要があります。

rehsape 関数には特別な -1 があります。-1 の値は、要素の総数 (他の次元値で乗算) で除算されます。たとえば、元のテンソル次元は (2, 2, 3) で、再形状は (-1, 3, 4) です。-1 の値は 12/(3×4) = 1、つまり、再形状後のテンソルの形状は (1, 3, 4) です

トーチの例:

import torch

x = torch.tensor([[[1, 2, 3], [4, 5, 6]],
                  [[7, 8, 9], [10, 11, 12]]])

b = x.reshape((4, 3, 1))
c = x.reshape((1, 3, 4))
d = x.reshape((12, 1))
print('x_shape:', x.shape)  # torch.Size([2, 2, 3])
print('b_shape:', b.shape)  # b_shape: torch.Size([4, 3, 1])
print('c_shape:', c.shape)  # c_shape: torch.Size([1, 3, 4])
print('d_shape:', d.shape)  # d_shape: torch.Size([12, 1])
print('x:', x)
print('b:', b)
print('c:', c)
print('d:', d)

numpy版

x.reshape()

numpy の reshape には order パラメータがあり、デフォルトの order='C' です。

order : オプションの範囲は {'C', 'F', 'A'}
(1) 「C」はクラス C で記述された読み取り/インデックス順序の要素を指します。最後の次元は最も速く変化し、最初の次元は最も遅く変化します。2次元配列を例に挙げると、簡単に言うと横に読み、横に書き込み、最初に1行読み書きします。

(2) 「F」は、FORTRAN のようなインデックスを使用して要素を順次読み取り/書き込みすることを指します。最後の次元の変更が最も遅く、最初の次元の変更が最も速くなります。縦読み、縦書き、1列ずつ読み書きします。「C」および「F」オプションでは、基になる配列のメモリ レイアウトは考慮されず、参照されるインデックスの順序のみが考慮されることに注意してください。

3) "A" オプションによって生成される配列の効果は、元の配列 a のデータ格納方法に関係します。データが FORTRAN に従って格納されている場合、その生成される効果は "F" と同じであり、それ以外の場合は "C" と同じです。

注: FORTRAN と C は 2 つの言語です。配列の格納方法は異なります。FORTRAN は列優先ですが、C は行優先です。Pythonでデフォルトの配列を生成すると、Cの方法で保存されます。ただし、多くの場合、数学的計算のためにいくつかの Fortran ライブラリを呼び出す必要があるため、numpy.asfortranarray メソッドを使用して、numpy によって生成された配列を FORTRAN 方法で保存する必要があります。

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
x = x.reshape((1, 1, 1, 2, 5))
print('x_shape:', x.shape)  # (1, 1, 1, 2, 5)

おすすめ

転載: blog.csdn.net/qq_28949847/article/details/128568799