PyTorchの操作方法はNumpyの操作方法と似ています。
そのためNumpyが使用できれば同じような操作方法でPyTrochも扱えるという学習コストの低さが一つのメリットといえます。
しかし、多少の差異はどうしても存在します。
そこで、Numpyの練習に非常に役立つ「100 numpy exercises 」をPyTorchで書き換えることによって、PyTorchの操作方法を学ぶのと同時にNumpyとの類似点や相違点を学んでいきたいと思います。
PyTorchのコードだけでなくNumpyのコードもあわせて紹介していきます。
別記事に他の問題の解法も書いています。
次のリンクにまとめているので、他の問題もあわせて参考にしていただければと思います。
- 1. Import the Pytorch package under the name np (★☆☆)
- 2. Print the numpy version and the configuration (★☆☆)
- 3. Create a null vector of size 10 (★☆☆)
- 4. How to find the memory size of any array (★☆☆)
- 5. How to get the documentation of the numpy add function from the command line? (★☆☆)
1. Import the Pytorch package under the name np (★☆☆)
「npという名前でNumpyをインポートしてください」
PyTorchの場合はtorchという名前でインポートします。
PyTorch
import torch
Numpy
import numpy as np
2. Print the numpy version and the configuration (★☆☆)
「Numpyのバージョンと設定を表示してください」
PyTorchの場合は、PyTorchのバージョンと設定を表示します。
PyTorch
print(torch.__version__)
torch.__config__.show()
Numpy
print(np.__version__)
np.show_config()
3. Create a null vector of size 10 (★☆☆)
「サイズが10の要素がすべて"0"の一次元配列を作ってください」
PyTorch
Z = torch.zeros(10) print(Z)
# Output tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
Numpy
Z = np.zeros(10) print(Z)
# Output [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
4. How to find the memory size of any array (★☆☆)
「配列のメモリサイズを求めてください」
PyTorch
Z = torch.zeros((10, 10)) print("%d bytes" % (Z.element_size() * Z.nelement()))
# Output 400 bytes
Numpy
Z = np.zeros((10,10)) print("%d bytes" % (Z.size * Z.itemsize))
# Output 800 bytes
5. How to get the documentation of the numpy add function from the command line? (★☆☆)
「コマンドラインからnumpyのadd関数のドキュメントを参照してください」
PyTorch
PyTorchでの出力方法が見つかりませんでした。
Jupyter Notebook上であれば、torch.add?
でDocstringに書かれている内容は確認できます。
Numpy
正解には%run ‘python -c "import numpy; numpy.info(numpy.add)"‘
となっていましたが、Jupyter Notebook上であれば、次のコマンドで参照することができます。
np.info(np.add)
# Output add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) Add arguments element-wise. Parameters ---------- x1, x2 : array_like The arrays to be added. If ``x1.shape != x2.shape``, they must be broadcastable to a common shape (which becomes the shape of the output). out : ndarray, None, or tuple of ndarray and None, optional A location into which the result is stored. If provided, it must have a shape that the inputs broadcast to. If not provided or None, a freshly-allocated array is returned. A tuple (possible only as a keyword argument) must have length equal to the number of outputs. where : array_like, optional This condition is broadcast over the input. At locations where the condition is True, the `out` array will be set to the ufunc result. Elsewhere, the `out` array will retain its original value. Note that if an uninitialized `out` array is created via the default ``out=None``, locations within it where the condition is False will remain uninitialized. **kwargs For other keyword-only arguments, see the :ref:`ufunc docs <ufuncs.kwargs>`. Returns ------- add : ndarray or scalar The sum of `x1` and `x2`, element-wise. This is a scalar if both `x1` and `x2` are scalars. Notes ----- Equivalent to `x1` + `x2` in terms of array broadcasting. Examples -------- >>> np.add(1.0, 4.0) 5.0 >>> x1 = np.arange(9.0).reshape((3, 3)) >>> x2 = np.arange(3.0) >>> np.add(x1, x2) array([[ 0., 2., 4.], [ 3., 5., 7.], [ 6., 8., 10.]])