Source code for jacinle.nd.shape

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : shape.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 01/03/2020
#
# This file is part of Jacinle.
# Distributed under terms of the MIT license.

import numpy as np

__all__ = ['unsqueeze', 'unsqueeze_as', 'softmax']


[docs] def unsqueeze(x: np.ndarray, *axes: int) -> np.ndarray: """Unsqueeze the numpy array at the given axes. Similar to the PyTorch's :meth:`torch.unsqueeze`. Args: x: the input array. axes: the axes to unsqueeze. Returns: the unsqueezed array. """ for axis in axes: x = np.expand_dims(x, axis) return x
[docs] def unsqueeze_as(x: np.ndarray, y: np.ndarray, *x_axes_in_y: int) -> np.ndarray: """Unsqueeze the numpy array ``x`` as the shape of ``y``. The corresponding axes in ``x`` are specified by ``x_axes_in_y``. Example: >>> x = np.zeros((2, 3, 4)) >>> y = np.zeros((2, 3, 4, 5)) >>> unsqueeze_as(x, y, 0, 1, 2).shape (2, 3, 4, 1) Args: x: the input array. y: the target array. x_axes_in_y: the axes in ``x`` that correspond to the axes in ``y``. Returns: the unsqueezed array. """ for i in range(len(y.shape)): if i not in x_axes_in_y: x = unsqueeze(x, i) return x
[docs] def softmax(x: np.ndarray, axis: int = -1) -> np.ndarray: r"""Compute the softmax of the input array at the given axis. .. math:: \text{softmax}(x)_i = \frac{e^{x_i}}{\sum_j e^{x_j}} Args: x: the input array. axis: the axis to apply softmax. Returns: the softmax array. """ e_x = np.exp(x - np.max(x, axis=axis, keepdims=True)) return e_x / e_x.sum(axis=axis, keepdims=True)