{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Tensor\n", "\n", "[![](https://gitee.com/mindspore/docs/raw/r1.2/docs/programming_guide/source_zh_cn/_static/logo_source.png)](https://gitee.com/mindspore/docs/blob/r1.2/docs/programming_guide/source_zh_cn/tensor.ipynb) [![](https://gitee.com/mindspore/docs/raw/r1.2/docs/programming_guide/source_zh_cn/_static/logo_notebook.png)](https://obs.dualstack.cn-north-4.myhuaweicloud.com/mindspore-website/notebook/r1.2/programming_guide/mindspore_tensor.ipynb) [![](https://gitee.com/mindspore/docs/raw/r1.2/docs/programming_guide/source_zh_cn/_static/logo_modelarts.png)](https://console.huaweicloud.com/modelarts/?region=cn-north-4#/notebook/loading?share-url-b64=aHR0cHM6Ly9vYnMuZHVhbHN0YWNrLmNuLW5vcnRoLTQubXlodWF3ZWljbG91ZC5jb20vbWluZHNwb3JlLXdlYnNpdGUvbm90ZWJvb2svbW9kZWxhcnRzL3Byb2dyYW1taW5nX2d1aWRlL21pbmRzcG9yZV90ZW5zb3IuaXB5bmI=&image_id=65f636a0-56cf-49df-b941-7d2a07ba8c8c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 概述\n", "\n", "张量(Tensor)是MindSpore网络运算中的基本数据结构。张量中的数据类型可参考[dtype](https://www.mindspore.cn/doc/programming_guide/zh-CN/r1.2/dtype.html)。\n", "\n", "不同维度的张量分别表示不同的数据,0维张量表示标量,1维张量表示向量,2维张量表示矩阵,3维张量可以表示彩色图像的RGB三通道等等。\n", "\n", "> 本文中的所有示例,支持在PyNative模式下运行。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 张量构造\n", "\n", "构造张量时,支持传入`Tensor`、`float`、`int`、`bool`、`tuple`、`list`和`NumPy.array`类型,其中`tuple`和`list`里只能存放`float`、`int`、`bool`类型数据。\n", "\n", "`Tensor`初始化时,可指定dtype。如果没有指定dtype,初始值`int`、`float`、`bool`分别生成数据类型为`mindspore.int32`、`mindspore.float32`、`mindspore.bool_`的0维Tensor,\n", "初始值`tuple`和`list`生成的1维`Tensor`数据类型与`tuple`和`list`里存放的数据类型相对应,如果包含多种不同类型的数据,则按照优先级:`bool` < `int` < `float`,选择相对优先级最高类型所对应的mindspore数据类型。\n", "如果初始值是`Tensor`,则生成的`Tensor`数据类型与其一致;如果初始值是`NumPy.array`,则生成的`Tensor`数据类型与之对应。\n", "\n", "代码样例如下:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-02-03T02:59:50.340750Z", "start_time": "2021-02-03T02:59:49.571048Z" }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1 2]\n", " [3 4]] \n", "\n", " 1 \n", "\n", " 2 \n", "\n", " True \n", "\n", " [1 2 3] \n", "\n", " [4. 5. 6.] \n", "\n", " [4. 5. 6.]\n" ] } ], "source": [ "import numpy as np\n", "from mindspore import Tensor\n", "from mindspore import dtype as mstype\n", "\n", "x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)\n", "y = Tensor(1.0, mstype.int32)\n", "z = Tensor(2, mstype.int32)\n", "m = Tensor(True, mstype.bool_)\n", "n = Tensor((1, 2, 3), mstype.int16)\n", "p = Tensor([4.0, 5.0, 6.0], mstype.float64)\n", "q = Tensor(p, mstype.float64)\n", "\n", "print(x, \"\\n\\n\", y, \"\\n\\n\", z, \"\\n\\n\", m, \"\\n\\n\", n, \"\\n\\n\", p, \"\\n\\n\", q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 张量的属性和方法" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 属性\n", "\n", "张量的属性包括形状(shape)和数据类型(dtype)。\n", "\n", " * 形状:`Tensor`的shape,是一个tuple。\n", "\n", " * 数据类型:`Tensor`的dtype,是MindSpore的一个数据类型。\n", "\n", "代码样例如下:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-02-03T02:59:50.347520Z", "start_time": "2021-02-03T02:59:50.342826Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 2) Int32\n" ] } ], "source": [ "import numpy as np\n", "from mindspore import Tensor\n", "from mindspore import dtype as mstype\n", "\n", "x = Tensor(np.array([[1, 2], [3, 4]]), mstype.int32)\n", "x_shape = x.shape\n", "x_dtype = x.dtype\n", "\n", "print(x_shape, x_dtype)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 方法\n", "\n", "张量的方法包括`all`、`any`和`asnumpy`,`all`和`any`方法目前只支持Ascend,并且要求`Tensor`的数据类型是`mindspore.bool_`。\n", "\n", "- `all(axis, keep_dims)`:在指定维度上通过`and`操作进行归约,`axis`代表归约维度,`keep_dims`表示是否保留归约后的维度。\n", "\n", "- `any(axis, keep_dims)`:在指定维度上通过`or`操作进行归约,参数含义同`all`。\n", "\n", "- `asnumpy()`:将`Tensor`转换为`NumPy`的`array`。\n", "\n", "代码样例如下:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-02-03T02:59:50.374128Z", "start_time": "2021-02-03T02:59:50.349665Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False \n", "\n", " True \n", "\n", " [[ True True]\n", " [False False]]\n" ] } ], "source": [ "import numpy as np\n", "from mindspore import Tensor\n", "from mindspore import dtype as mstype\n", "\n", "x = Tensor(np.array([[True, True], [False, False]]), mstype.bool_)\n", "x_all = x.all()\n", "x_any = x.any()\n", "x_array = x.asnumpy()\n", "\n", "print(x_all, \"\\n\\n\", x_any, \"\\n\\n\", x_array)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }