1. 多维数组

NumPy 构建多维数组代码示例如下:

In [1]: import numpy as npIn [2]: A = np.array([1,2,3,4])In [3]: A
Out[3]: array([1, 2, 3, 4])In [4]: np.ndim(A)
Out[4]: 1In [5]: A.shape
Out[5]: (4,)In [6]: A.shape[0]
Out[6]: 4In [7]:

从以上可以看出:

  • 数组的维数可以通过 np.ndim() 函数获得;
  • 数组的形状可以通过实例变量 shape 获得;

注意,这里的 A.shape 的结果是个元组( tuple )。这是因为一维数组的情况下也要返回和多维数组的情况下一致的结果。

例如,二维数组时返回的是元组(4,3),三维数组时返回的是元组(4,3,2),因此一维数组时也同样以元组的形式返回结果。

生成一个二维数组:

In [7]: B = np.array([[1,2], [3, 4], [5, 6]])In [8]: B
Out[8]:
array([[1, 2],[3, 4],[5, 6]])In [9]: B.shape
Out[9]: (3, 2)In [11]: B.ndim
Out[11]: 2In [12]:

这里生成了一个 3 × 2 的数组 B 。3 × 2 的数组表示第一个维度有 3 个元素,第二个维度有 2 个元素。另外,第一个维度对应第 0 维,第二个维度对应第 1 维。二维数组也称为矩阵( matrix )。

2. 矩阵相乘

2 × 2 的矩阵,其乘积可以像图 3-11 这样进行计算:

矩阵的乘积是通过左边矩阵的行(横向)和右边矩阵的列(纵向)以对应元素的方式相乘后再求和而得到的。并且,运算的结果保存为新的多维数组的元素。

比如,A 的第 1 行和 B 的第 1 列的乘积结果是新数组的第 1 行第 1 列的元素,A 的第 2 行和 B 的第 1 列的结果是新数组的第 2 行第 1 列的元素。

用代码实现:

In [12]: A = np.array([[1,2], [3,4]])In [13]: B = np.array([[5,6], [7,8]])In [14]: A
Out[14]:
array([[1, 2],[3, 4]])In [15]: B
Out[15]:
array([[5, 6],[7, 8]])In [16]: A.dot(B)
Out[16]:
array([[19, 22],[43, 50]])In [17]: np.dot(A, B)
Out[17]:
array([[19, 22],[43, 50]])In [18]: np.dot(B, A)
Out[18]:
array([[23, 34],[31, 46]])In [19]:

AB 都是 2 × 2 的矩阵,它们的乘积可以通过 NumPynp.dot() 函数计算(乘积也称为点积)。 np.dot() 接收两个 NumPy 数组作为参数,并返回数组的乘积。

这里要注意的是, np.dot(A, B)np.dot(B, A) 的值可能不一样。和一般的运算( +* 等)不同,矩阵的乘积运算中,操作数( AB )的顺序不同,结果也会不同。

注意:

  • 矩阵 A 的形状是 2 × 3,矩阵 B 的形状是 3 × 2,矩阵 A 的第 1 维的元素个数(3)和矩阵 B 的第 0 维的元素个数(3)相等。如果这两个值不相等,则无法计算矩阵的乘积。
  • 运算结果的矩阵 C 的形状是由矩阵 A 的行数和矩阵 B 的列数构成的。
In [19]: B = np.array([7,8])In [20]: A = np.array([[1,2], [3, 4]])In [22]: B
Out[22]: array([7, 8])In [23]: A
Out[23]:
array([[1, 2],[3, 4]])In [24]: np.dot(B, A)
Out[24]: array([31, 46])In [25]: B.shape
Out[25]: (2,)In [26]: A.shape
Out[26]: (2, 2)In [27]:
In [27]: A = np.array([[1,2], [3, 4], [5,6]])In [28]: A
Out[28]:
array([[1, 2],[3, 4],[5, 6]])In [29]: A.shape
Out[29]: (3, 2)In [30]: B = np.array([7,8])In [31]: B
Out[31]: array([7, 8])In [32]: B.shape
Out[32]: (2,)In [33]: np.dot(A, B)
Out[33]: array([23, 53, 83])In [34]:

3. 神经网络的內积

使用 NumPy 矩阵来实现神经网络。这里我们以图 3-14 中的简单神经网络为对象。这个神经网络省略了偏置和激活函数,只有权重。

实现该神经网络时,要注意 XWY 形状,特别是 XW 的对应维度的元素个数是否一致,这一点很重要。

In [1]: import numpy as npIn [2]: X = np.array([1,2])In [3]: W = np.array([[1,3,5], [2,4,6]])In [5]: X
Out[5]: array([1, 2])In [6]: W
Out[6]:
array([[1, 3, 5],[2, 4, 6]])In [7]: Y = np.dot(X, W)In [8]: Y
Out[8]: array([ 5, 11, 17])In [9]:

如上所示,使用 np.dot (多维数组的点积),可以一次性计算出 Y 的结果。这意味着,即便 Y 的元素个数为100 或 1000,也可以通过一次运算就计算出结果。

如果不使用 np.dot ,就必须单独计算 Y 的每一个元素(或者说必须使用 for 语句),非常麻烦。

参考:《深度学习入门:基于Python的理论与实现》

机器学习入门(04)— 神经网络多维数组 NumPy 相乘运算相关推荐

  1. python3 多维数组 NumPy ndarray 简介

    目录 基础 重要属性 创建 Converting Python array_like Objects to NumPy Arrays 多维数组 一维 通用数学函数 基础 NumPy 的主要对象是齐次多 ...

  2. 2.python中的矩阵、多维数组----numpy

    最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得 ...

  3. 【剑指offer】面试题04:二维数组中的查找(java)

    在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: 现有矩阵 ...

  4. 剑指offer (04):二维数组中的查找 (C++ Python 实现)

    1 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例如: ⎡⎣⎢⎢⎢12 ...

  5. C语言实现动态二维数组及相乘

    一.二维数组的概念  1.二维数组本质上是以数组作为数组元素的数组,即数组的数组. 2.二维数组就是一个有行和列的矩阵,每一行代表一个数组,即数组的数组. 3.每一行数组内元素所在的位置可以用行和列号 ...

  6. numpy拼接多维数组(numpy.concatenate命令详解)

    numpy.concatenate 语法 numpy.concatenate((a1,a2,...), axis=0, out=None, dtype=None, casting="same ...

  7. [转载] python numpy.sqrt_python中numpy库ndarray多维数组的的运算:np.abs(x)、np.sqrt(x)、np.modf(x)等...

    参考链接: Python中的numpy.tan numpy库提供非常便捷的数组运算,方便数据的处理. 1.数组与标量之间可直接进行运算 In [45]: a Out[45]: array([[ 0, ...

  8. 机器学习入门04——共享单车数据预测实验

    共享单车骑行数据预测 任务说明 1. 任务描述 请在Capital Bikeshare (美国Washington, D.C.的一个共享单车公司)提供的自行车数据上进行回归分析.根据每天的天气信息,预 ...

  9. 机器学习入门——Python神经网络编程②

    python神经网络编程②-基于MNIST数据集 本人通过异步图书<python神经网络编程>这部书来学习,所以此博客内容大概为这本书的概括. 这时Python神经网络编程的第二讲,第一讲 ...

最新文章

  1. kinect深度距离误差_Kinect 深度测量原理
  2. [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及
  3. 类的加载过程二:Linking
  4. php 和风天气,【原创】彩云/和风天气插件
  5. 如果conda找不到想要安装的库怎么办PackagesNotFoundError: The following packages are not available from current
  6. 辨异 —— 机器学习概念辨异、模型理解
  7. [leetcode]5170. 验证二叉树
  8. JavaScript:对象转换为字符串、字符串转换为对象
  9. 添加内核驱动模块(5)(mydriver.c+ Konfig+Makefile )
  10. Spring Cloud从入门到精通(四):熔断器 Hystrix
  11. android下注入技术详解
  12. 发生在我们身边的灵异事件 - 发生在台湾奇萊山的一些灵异事件
  13. Android密码明文显示和星号显示切换
  14. 【SQL】经典50题 [ 3 ]:Q31-Q50
  15. 2022强国杯初赛部分题目
  16. 企业微信欢迎语如何将链接转换为图文卡片形式?
  17. 安装及配置JDK/JRE
  18. Linux mkdir 命令使用介绍
  19. 牛视系统源码,抖音矩阵系统功能开发定制。I‘m here
  20. [UOJ #31]【UR #2】猪猪侠再战括号序列

热门文章

  1. 2022-2028年中国体育赛事产业深度调研及投资前景预测报告
  2. 2022-2028年中国PE膜产业竞争现状及发展前景分析报告
  3. Go 学习笔记(56)— Go 第三方库 sqlx (操作数据库)
  4. MegEngine 框架设计
  5. MindSpore部署图像分割示例程序
  6. Minkowski坐标管理
  7. 混合装置实现了24/7的能量收集和储存
  8. 5G和AI机器人平台为工业4.0和无人机提供服务
  9. 10分钟内基于gpu的目标检测
  10. h264和h265多维度区别