作为一个张量计算库,算数操作是最基本的修养。PyTorch 中有一百来个算数操作算子。
逐元素操作算子PyTorch 中,Tensor 的逐元素操作可分为函数式操作和原位操作,在函数名中用 _ 后缀区分了二者,比如 tensor.abs() 是一个函数式操作,不改变 tensor 而将改变体现在返回值中,而 tensor.abs_() 是一个原位操作,既修改了原 tensor 又将这个修改后的值返回。
这里的操作都是逐元素进行的,元素之间没有关联。基本上每个 API 都有函数式和原位两个版本,也有作为 torch 模块的函数的过程化编程和作为 Tensor 的方法的面向对象式编程,其实面向过程和面向对象的唯一区别是第一个参数。每个算子一共有至少三种写法。
| 算子名 | 说明 |
|---|---|
| abs | 计算 input 中每个元素的绝对值. |
| absolute | Alias for torch.abs() |
| acos | inverse cosine 大家熟悉的 arccos input. |
| arccos | Alias for torch.acos(). |
| acosh | inverse hyperbolic cosine of input. |
| arccosh | Alias for torch.acosh(). |
| add | Adds other, scaled by alpha, to input. |
| addcdiv | Performs the element-wise division of tensor1 by tensor2, multiply the result by the scalar value and add it to input. |
| addcmul | Performs the element-wise multiplication of tensor1 by tensor2, multiply the result by the scalar value and add it to input. |
| angle | Computes the element-wise angle (in radians) of the given input tensor. |
| asin | Returns a new tensor with the arcsine of the elements of input. |
| arcsin | Alias for torch.asin(). |
| asinh | Returns a new tensor with the inverse hyperbolic sine of the elements of input. |
| arcsinh | Alias for torch.asinh(). |
| atan | Returns a new tensor with the arctangent of the elements of input. |
| arctan | Alias for torch.atan(). |
| atanh | Returns a new tensor with the inverse hyperbolic tangent of the elements of input. |
| arctanh | Alias for torch.atanh(). |
| atan2 | Element-wise arctangent of text{input}{i} / text{other}{i}inputi/otheri with consideration of the quadrant. |
| arctan2 | Alias for torch.atan2(). |
| bitwise_not | Computes the bitwise NOT of the given input tensor. |
| bitwise_and | Computes the bitwise AND of input and other. |
| bitwise_or | Computes the bitwise OR of input and other. |
| bitwise_xor | Computes the bitwise XOR of input and other. |
| bitwise_left_shift | Computes the left arithmetic shift of input by other bits. |
| bitwise_right_shift | Computes the right arithmetic shift of input by other bits. |
| ceil | Returns a new tensor with the ceil of the elements of input, the smallest integer greater than or equal to each element. |
| clamp | Clamps all elements in input into the range [ min, max ]. |
| clip | Alias for torch.clamp(). |
| conj_physical | Computes the element-wise conjugate of the given input tensor. |
| copysign | Create a new floating-point tensor with the magnitude of input and the sign of other, elementwise. |
| cos | Returns a new tensor with the cosine of the elements of input. |
| cosh | Returns a new tensor with the hyperbolic cosine of the elements of input. |
| deg2rad | Returns a new tensor with each of the elements of input converted from angles in degrees to radians. |
| div | Divides each element of the input input by the corresponding element of other. |
| divide | Alias for torch.div(). |
| digamma | Alias for torch.special.digamma(). |
| erf | Alias for torch.special.erf(). |
| erfc | Alias for torch.special.erfc(). |
| erfinv | Alias for torch.special.erfinv(). |
| exp | Returns a new tensor with the exponential of the elements of the input tensor input. |
| exp2 | Alias for torch.special.exp2(). |
| expm1 | Alias for torch.special.expm1(). |
| fake_quantize_per_channel_affine | Returns a new tensor with the data in input fake quantized per channel using scale, zero_point, quant_min and quant_max, across the channel specified by axis. |
| fake_quantize_per_tensor_affine | Returns a new tensor with the data in input fake quantized using scale, zero_point, quant_min and quant_max. |
| fix | Alias for torch.trunc() |
| float_power | Raises input to the power of exponent, elementwise, in double precision. |
| floor | Returns a new tensor with the floor of the elements of input, the largest integer less than or equal to each element. |
| floor_divide | |
| fmod | Applies C++’s std::fmod entrywise. |
| frac | Computes the fractional portion of each element in input. |
| frexp | Decomposes input into mantissa and exponent tensors such that input = mantissa × 2 exponent text{input} = text{mantissa} times 2^{text{exponent}} input=mantissa×2exponent. |
| gradient | Estimates the gradient of a function g : R n → R g : mathbb{R}^n rightarrow mathbb{R} g:Rn→R in one or more dimensions using the second-order accurate central differences method. |
| imag | Returns a new tensor containing imaginary values of the self tensor. |
| ldexp | Multiplies input by 2 other 2^text{other} 2other. |
| lerp | Does a linear interpolation of two tensors start (given by input) and end based on a scalar or tensor weight and returns the resulting out tensor. |
| lgamma | Computes the natural logarithm of the absolute value of the gamma function on input. |
| log | Returns a new tensor with the natural logarithm of the elements of input. |
| log10 | Returns a new tensor with the logarithm to the base 10 of the elements of input. |
| log1p | Returns a new tensor with the natural logarithm of (1 + input). |
| log2 | Returns a new tensor with the logarithm to the base 2 of the elements of input. |
| logaddexp | Logarithm of the sum of exponentiations of the inputs. |
| logaddexp2 | Logarithm of the sum of exponentiations of the inputs in base-2. |
| logical_and | Computes the element-wise logical AND of the given input tensors. |
| logical_not | Computes the element-wise logical NOT of the given input tensor. |
| logical_or | Computes the element-wise logical OR of the given input tensors. |
| logical_xor | Computes the element-wise logical XOR of the given input tensors. |
| logit | Alias for torch.special.logit(). |
| hypot | Given the legs of a right triangle, return its hypotenuse. |
| i0 | Alias for torch.special.i0(). |
| igamma | Alias for torch.special.gammainc(). |
| igammac | Alias for torch.special.gammaincc(). |
| mul | Multiplies input by other. |
| multiply | Alias for torch.mul(). |
| mvlgamma | Alias for torch.special.multigammaln(). |
| nan_to_num | Replaces NaN, positive infinity, and negative infinity values in input with the values specified by nan, posinf, and neginf, respectively. |
| neg | Returns a new tensor with the negative of the elements of input. |
| negative | Alias for torch.neg() |
| nextafter | Return the next floating-point value after input towards other, elementwise. |
| polygamma | Alias for torch.special.polygamma(). |
| positive | Returns input. |
| pow | Takes the power of each element in input with exponent and returns a tensor with the result. |
| quantized_batch_norm | Applies batch normalization on a 4D (NCHW) quantized tensor. |
| quantized_max_pool1d | Applies a 1D max pooling over an input quantized tensor composed of several input planes. |
| quantized_max_pool2d | Applies a 2D max pooling over an input quantized tensor composed of several input planes. |
| rad2deg | Returns a new tensor with each of the elements of input converted from angles in radians to degrees. |
| real | Returns a new tensor containing real values of the self tensor. |
| reciprocal | Returns a new tensor with the reciprocal of the elements of input |
| remainder | Computes Python’s modulus operation entrywise. |
| round | Rounds elements of input to the nearest integer. |
| rsqrt | Returns a new tensor with the reciprocal of the square-root of each of the elements of input. |
| sigmoid | Alias for torch.special.expit(). |
| sign | Returns a new tensor with the signs of the elements of input. |
| sgn | This function is an extension of torch.sign() to complex tensors. |
| signbit | Tests if each element of input has its sign bit set (is less than zero) or not. |
| sin | Returns a new tensor with the sine of the elements of input. |
| sinc | Alias for torch.special.sinc(). |
| sinh | Returns a new tensor with the hyperbolic sine of the elements of input. |
| sqrt | Returns a new tensor with the square-root of the elements of input. |
| square | Returns a new tensor with the square of the elements of input. |
| sub | Subtracts other, scaled by alpha, from input. |
| subtract | Alias for torch.sub(). |
| tan | Returns a new tensor with the tangent of the elements of input. |
| tanh | Returns a new tensor with the hyperbolic tangent of the elements of input. |
| true_divide | Alias for torch.div() with rounding_mode=None. |
| trunc | Returns a new tensor with the truncated integer values of the elements of input. |
| xlogy | Alias for torch.special.xlogy(). |
除了上述函数,PyTorch 还为我们重载了 Tensor 的很多运算符,这些运算符都符合 Python 的语义。PyTorch 的开发者为了 be Pythonic 还是费了相当大心思的,这也是 PyTorch 能很好融入 Python 生态的原因。
| 运算符 | 说明 |
|---|---|
| + | add |
| - | sub |
| * | mul |
| / | div |
| // | truediv |
| @ | matmul |
规约是函数式编程中的重要概念。
| 算子名 | 说明 |
|---|---|
| argmax | Returns the indices of the maximum value of all elements in the input tensor. |
| argmin | Returns the indices of the minimum value(s) of the flattened tensor or along a dimension |
| amax | Returns the maximum value of each slice of the input tensor in the given dimension(s) dim. |
| amin | Returns the minimum value of each slice of the input tensor in the given dimension(s) dim. |
| aminmax | Computes the minimum and maximum values of the input tensor. |
| all | Tests if all elements in input evaluate to True. |
| any | Tests if any element in input evaluates to True. |
| max | Returns the maximum value of all elements in the input tensor. |
| min | Returns the minimum value of all elements in the input tensor. |
| dist | Returns the p-norm of (input - other) |
| logsumexp | Returns the log of summed exponentials of each row of the input tensor in the given dimension dim. |
| mean | Returns the mean value of all elements in the input tensor. |
| nanmean | Computes the mean of all non-NaN elements along the specified dimensions. |
| median | Returns the median of the values in input. |
| nanmedian | Returns the median of the values in input, ignoring NaN values. |
| mode | Returns a namedtuple (values, indices) where values is the mode value of each row of the input tensor in the given dimension dim, i.e. a value which appears most often in that row, and indices is the index location of each mode value found. |
| norm | Returns the matrix norm or vector norm of a given tensor. |
| nansum | Returns the sum of all elements, treating Not a Numbers (NaNs) as zero. |
| prod | Returns the product of all elements in the input tensor. |
| quantile | Computes the q-th quantiles of each row of the input tensor along the dimension dim. |
| nanquantile | This is a variant of torch.quantile() that “ignores” NaN values, computing the quantiles q as if NaN values in input did not exist. |
| std | If unbiased is True, Bessel’s correction will be used. |
| std_mean | If unbiased is True, Bessel’s correction will be used to calculate the standard deviation. |
| sum | Returns the sum of all elements in the input tensor. |
| unique | Returns the unique elements of the input tensor. |
| unique_consecutive | Eliminates all but the first element from every consecutive group of equivalent elements. |
| var | If unbiased is True, Bessel’s correction will be used. |
| var_mean | If unbiased is True, Bessel’s correction will be used to calculate the variance. |
| count_nonzero | Counts the number of non-zero values in the tensor input along the given dim. |
| allclose | This function checks if all input and other satisfy the condition: |
|---|---|
| argsort | Returns the indices that sort a tensor along a given dimension in ascending order by value. |
| eq | Computes element-wise equality |
| equal | True if two tensors have the same size and elements, False otherwise. |
| ge | Computes text{input} geq text{other}input≥other element-wise. |
| greater_equal | Alias for torch.ge(). |
| gt | Computes text{input} > text{other}input>other element-wise. |
| greater | Alias for torch.gt(). |
| isclose | Returns a new tensor with boolean elements representing if each element of input is “close” to the corresponding element of other. |
| isfinite | Returns a new tensor with boolean elements representing if each element is finite or not. |
| isin | Tests if each element of elements is in test_elements. |
| isinf | Tests if each element of input is infinite (positive or negative infinity) or not. |
| isposinf | Tests if each element of input is positive infinity or not. |
| isneginf | Tests if each element of input is negative infinity or not. |
| isnan | Returns a new tensor with boolean elements representing if each element of input is NaN or not. |
| isreal | Returns a new tensor with boolean elements representing if each element of input is real-valued or not. |
| kthvalue | Returns a namedtuple (values, indices) where values is the k th smallest element of each row of the input tensor in the given dimension dim. |
| le | Computes text{input} leq text{other}input≤other element-wise. |
| less_equal | Alias for torch.le(). |
| lt | Computes text{input} < text{other}input |
| less | Alias for torch.lt(). |
| maximum | Computes the element-wise maximum of input and other. |
| minimum | Computes the element-wise minimum of input and other. |
| fmax | Computes the element-wise maximum of input and other. |
| fmin | Computes the element-wise minimum of input and other. |
| ne | Computes text{input} neq text{other}input=other element-wise. |
| not_equal | Alias for torch.ne(). |
| sort | Sorts the elements of the input tensor along a given dimension in ascending order by value. |
| topk | Returns the k largest elements of the given input tensor along a given dimension. |
| msort | Sorts the elements of the input tensor along its first dimension in ascending order by value. |
| stft | Short-time Fourier transform (STFT). |
|---|---|
| istft | Inverse short time Fourier Transform. |
| bartlett_window | Bartlett window function. |
| blackman_window | Blackman window function. |
| hamming_window | Hamming window function. |
| hann_window | Hann window function. |
| kaiser_window | Computes the Kaiser window with window length window_length and shape parameter beta. |
| atleast_1d | Returns a 1-dimensional view of each input tensor with zero dimensions. |
|---|---|
| atleast_2d | Returns a 2-dimensional view of each input tensor with zero dimensions. |
| atleast_3d | Returns a 3-dimensional view of each input tensor with zero dimensions. |
| bincount | Count the frequency of each value in an array of non-negative ints. |
| block_diag | Create a block diagonal matrix from provided tensors. |
| broadcast_tensors | Broadcasts the given tensors according to Broadcasting semantics. |
| broadcast_to | Broadcasts input to the shape shape. |
| broadcast_shapes | Similar to broadcast_tensors() but for shapes. |
| bucketize | Returns the indices of the buckets to which each value in the input belongs, where the boundaries of the buckets are set by boundaries. |
| cartesian_prod | Do cartesian product of the given sequence of tensors. |
| cdist | Computes batched the p-norm distance between each pair of the two collections of row vectors. |
| clone | Returns a copy of input. |
| combinations | Compute combinations of length rr of the given tensor. |
| corrcoef | Estimates the Pearson product-moment correlation coefficient matrix of the variables given by the input matrix, where rows are the variables and columns are the observations. |
| cov | Estimates the covariance matrix of the variables given by the input matrix, where rows are the variables and columns are the observations. |
| cross | Returns the cross product of vectors in dimension dim of input and other. |
| cummax | Returns a namedtuple (values, indices) where values is the cumulative maximum of elements of input in the dimension dim. |
| cummin | Returns a namedtuple (values, indices) where values is the cumulative minimum of elements of input in the dimension dim. |
| cumprod | Returns the cumulative product of elements of input in the dimension dim. |
| cumsum | Returns the cumulative sum of elements of input in the dimension dim. |
| diag | If input is a vector (1-D tensor), then returns a 2-D square tensor |
| diag_embed | Creates a tensor whose diagonals of certain 2D planes (specified by dim1 and dim2) are filled by input. |
| diagflat | If input is a vector (1-D tensor), then returns a 2-D square tensor |
| diagonal | Returns a partial view of input with the its diagonal elements with respect to dim1 and dim2 appended as a dimension at the end of the shape. |
| diff | Computes the n-th forward difference along the given dimension. |
| einsum | Sums the product of the elements of the input operands along dimensions specified using a notation based on the Einstein summation convention. |
| flatten | Flattens input by reshaping it into a one-dimensional tensor. |
| flip | Reverse the order of a n-D tensor along given axis in dims. |
| fliplr | Flip tensor in the left/right direction, returning a new tensor. |
| flipud | Flip tensor in the up/down direction, returning a new tensor. |
| kron | Computes the Kronecker product, denoted by otimes⊗, of input and other. |
| rot90 | Rotate a n-D tensor by 90 degrees in the plane specified by dims axis. |
| gcd | Computes the element-wise greatest common divisor (GCD) of input and other. |
| histc | Computes the histogram of a tensor. |
| histogram | Computes a histogram of the values in a tensor. |
| histogramdd | Computes a multi-dimensional histogram of the values in a tensor. |
| meshgrid | Creates grids of coordinates specified by the 1D inputs in attr:tensors. |
| lcm | Computes the element-wise least common multiple (LCM) of input and other. |
| logcumsumexp | Returns the logarithm of the cumulative summation of the exponentiation of elements of input in the dimension dim. |
| ravel | Return a contiguous flattened tensor. |
| renorm | Returns a tensor where each sub-tensor of input along dimension dim is normalized such that the p-norm of the sub-tensor is lower than the value maxnorm |
| repeat_interleave | Repeat elements of a tensor. |
| roll | Roll the tensor input along the given dimension(s). |
| searchsorted | Find the indices from the innermost dimension of sorted_sequence such that, if the corresponding values in values were inserted before the indices, when sorted, the order of the corresponding innermost dimension within sorted_sequence would be preserved. |
| tensordot | Returns a contraction of a and b over multiple dimensions. |
| trace | Returns the sum of the elements of the diagonal of the input 2-D matrix. |
| tril | Returns the lower triangular part of the matrix (2-D tensor) or batch of matrices input, the other elements of the result tensor out are set to 0. |
| tril_indices | Returns the indices of the lower triangular part of a row-by- col matrix in a 2-by-N Tensor, where the first row contains row coordinates of all indices and the second row contains column coordinates. |
| triu | Returns the upper triangular part of a matrix (2-D tensor) or batch of matrices input, the other elements of the result tensor out are set to 0. |
| triu_indices | Returns the indices of the upper triangular part of a row by col matrix in a 2-by-N Tensor, where the first row contains row coordinates of all indices and the second row contains column coordinates. |
| vander | Generates a Vandermonde matrix. |
| view_as_real | Returns a view of input as a real tensor. |
| view_as_complex | Returns a view of input as a complex tensor. |
| resolve_conj | Returns a new tensor with materialized conjugation if input’s conjugate bit is set to True, else returns input. |
| resolve_neg | Returns a new tensor with materialized negation if input’s negative bit is set to True, else returns input. |
| addbmm | Performs a batch matrix-matrix product of matrices stored in batch1 and batch2, with a reduced add step (all matrix multiplications get accumulated along the first dimension). |
|---|---|
| addmm | Performs a matrix multiplication of the matrices mat1 and mat2. |
| addmv | Performs a matrix-vector product of the matrix mat and the vector vec. |
| addr | Performs the outer-product of vectors vec1 and vec2 and adds it to the matrix input. |
| baddbmm | Performs a batch matrix-matrix product of matrices in batch1 and batch2. |
| bmm | Performs a batch matrix-matrix product of matrices stored in input and mat2. |
| chain_matmul | Returns the matrix product of the NN 2-D tensors. |
| cholesky | Computes the Cholesky decomposition of a symmetric positive-definite matrix AA or for batches of symmetric positive-definite matrices. |
| cholesky_inverse | Computes the inverse of a symmetric positive-definite matrix AA using its Cholesky factor uu: returns matrix inv. |
| cholesky_solve | Solves a linear system of equations with a positive semidefinite matrix to be inverted given its Cholesky factor matrix uu. |
| dot | Computes the dot product of two 1D tensors. |
| eig | Computes the eigenvalues and eigenvectors of a real square matrix. |
| geqrf | This is a low-level function for calling LAPACK’s geqrf directly. |
| ger | Alias of torch.outer(). |
| inner | Computes the dot product for 1D tensors. |
| inverse | Alias for torch.linalg.inv() |
| det | Alias for torch.linalg.det() |
| logdet | Calculates log determinant of a square matrix or batches of square matrices. |
| slogdet | Alias for torch.linalg.slogdet() |
| lstsq | Computes the solution to the least squares and least norm problems for a full rank matrix AA of size (m times n)(m×n) and a matrix BB of size (m times k)(m×k). |
| lu | Computes the LU factorization of a matrix or batches of matrices A. |
| lu_solve | Returns the LU solve of the linear system Ax = bA**x=b using the partially pivoted LU factorization of A from torch.lu(). |
| lu_unpack | Unpacks the data and pivots from a LU factorization of a tensor into tensors L and U and a permutation tensor P such that LU_data, LU_pivots = (P @ L @ U).lu(). |
| matmul | Matrix product of two tensors. |
| matrix_power | Alias for torch.linalg.matrix_power() |
| matrix_rank | Returns the numerical rank of a 2-D tensor. |
| matrix_exp | Alias for torch.linalg.matrix_exp(). |
| mm | Performs a matrix multiplication of the matrices input and mat2. |
| mv | Performs a matrix-vector product of the matrix input and the vector vec. |
| orgqr | Alias for torch.linalg.householder_product(). |
| ormqr | Computes the matrix-matrix multiplication of a product of Householder matrices with a general matrix. |
| outer | Outer product of input and vec2. |
| pinverse | Alias for torch.linalg.pinv() |
| qr | Computes the QR decomposition of a matrix or a batch of matrices input, and returns a namedtuple (Q, R) of tensors such that text{input} = Q Rinput=QR with QQ being an orthogonal matrix or batch of orthogonal matrices and RR being an upper triangular matrix or batch of upper triangular matrices. |
| svd | Computes the singular value decomposition of either a matrix or batch of matrices input. |
| svd_lowrank | Return the singular value decomposition (U, S, V) of a matrix, batches of matrices, or a sparse matrix AA such that A approx U diag(S) V^TA≈Udia**g(S)V**T. |
| pca_lowrank | Performs linear Principal Component Analysis (PCA) on a low-rank matrix, batches of such matrices, or sparse matrix. |
| symeig | This function returns eigenvalues and eigenvectors of a real symmetric or complex Hermitian matrix input or a batch thereof, represented by a namedtuple (eigenvalues, eigenvectors). |
| lobpcg | Find the k largest (or smallest) eigenvalues and the corresponding eigenvectors of a symmetric positive definite generalized eigenvalue problem using matrix-free LOBPCG methods. |
| trapz | Alias for torch.trapezoid(). |
| trapezoid | Computes the trapezoidal rule along dim. |
| cumulative_trapezoid | Cumulatively computes the trapezoidal rule along dim. |
| triangular_solve | Solves a system of equations with a square upper or lower triangular invertible matrix AA and multiple right-hand sides bb. |
| vdot | Computes the dot product of two 1D tensors. |
| compiled_with_cxx11_abi | Returns whether PyTorch was built with _GLIBCXX_USE_CXX11_ABI=1 |
|---|---|
| result_type | Returns the torch.dtype that would result from performing an arithmetic operation on the provided input tensors. |
| can_cast | Determines if a type conversion is allowed under PyTorch casting rules described in the type promotion documentation. |
| promote_types | Returns the torch.dtype with the smallest size and scalar kind that is not smaller nor of lower kind than either type1 or type2. |
| use_deterministic_algorithms | Sets whether PyTorch operations must use “deterministic” algorithms. |
| are_deterministic_algorithms_enabled | Returns True if the global deterministic flag is turned on. |
| is_deterministic_algorithms_warn_only_enabled | Returns True if the global deterministic flag is set to warn only. |
| set_deterministic_debug_mode | Sets the debug mode for deterministic operations. |
| get_deterministic_debug_mode | Returns the current value of the debug mode for deterministic operations. |
| set_float32_matmul_precision | Sets the internal precision of float32 matrix multiplications. |
| get_float32_matmul_precision | Returns the current value of float32 matrix multiplication precision. |
| set_warn_always | When this flag is False (default) then some PyTorch warnings may only appear once per process. |
| is_warn_always_enabled | Returns True if the global warn_always flag is turned on. |
| _assert | A wrapper around Python’s assert which is symbolically traceable. |
PyTorch 的算子大多为异步惰性求值,尤其是 GPU 版本。
算子只定义了入口,真正的实现依赖于不同的后端,常用的有 cpu、cuda、mkldnn、npu 等等。
知道这些的意义是,不用管这些,爱怎么编程就怎么编就可以了,PyTorch 引擎会帮你搞定一切的。



