昊虹AI笔记网

 找回密码
 立即注册
搜索
查看: 761|回复: 0
收起左侧

Python_Numpy库的ndarray对象常用构造方法及初始化方法

[复制链接]

239

主题

241

帖子

928

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
928
昊虹君 发表于 2022-11-8 11:09 | 显示全部楼层 |阅读模式
Python_Numpy库的ndarray对象常用构造方法及初始化方法

本文收集Python的Numpy库的ndarray对象常用的构造方法及初始化方法,会不断更新。

目录
  • 1 直接赋值初始化一个ndarray对象
  • 2 通过浅拷贝与深拷贝得到一个新的ndarray对象
        2-1 通过"="赋值初始化一个新的ndarray对象(浅拷贝)
        2-2 通过copy()方法实现深拷贝
  • 3 创建和原矩阵大小一样、通道一样,但是数据类型和原矩阵不一样的全0矩阵
  • 4 通过函数ones()、zeros()创建指定大小和数据类型且元素值全为1或0的二维或多维矩阵
        4-1 创建元素值全为1的二维矩阵
        4-2 创建元素值全为0的二通道、三行、四列的三维矩阵
        4-3 创建元素值全为1的四维矩阵
  • 5 创建指定大小、指定数据类型、数据值按均匀分布生成的整数矩阵
  • 6 创建指定大小、数据值按正态分布(均值为0,标准差为1)生成的矩阵


1 直接赋值初始化一个ndarray对象
示例代码如下:
  1. A = np.array([[1, 2, 3, 4, 5],
  2.               [6, 7, 8, 9, 10],
  3.               [11, 12, 13, 14, 15],
  4.               [16, 17, 18, 19, 20],
  5.               [21, 22, 23, 24, 25]], dtype='int8')
复制代码

上面代码中的第二个参数dtype是可选的,如果不填,则系统根据矩阵元素的数据大小来确定。
上面的代码创建的是二维矩阵,我们再看一个创建三维矩阵的例子。
  1. # !/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import numpy as np

  4. B = np.array([[[11, 12, 13, 14],
  5.                [15, 16, 17, 18]],
  6.               [[19, 20, 21, 22],
  7.                [23, 24, 25, 26]],
  8.               [[27, 28, 29, 30],
  9.                [31, 32, 33, 34]]])
复制代码

运行结果如下图所示:


从其shape属性可以看出,B矩阵的尺寸为三通道,两行,四列。其内容如下:

                                          

                                          


2 通过浅拷贝与深拷贝得到一个新的ndarray对象

2-1 通过"="赋值初始化一个新的ndarray对象(浅拷贝)
示例代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. C = B

  9. C[0, 0, 0] = 100
复制代码

运行结果如下所示:

                                          

从上图的结构中我们可以看到,对于ndarray对象,通过“=”赋值得到的新对象和原对象共用数据存储区,即实现的是浅拷贝,修改其中一个对象的数据值会影响到另一个对象的数据值。

2-2 通过copy()方法实现深拷贝
示例代码如下:
  1. import numpy as np

  2. A1 = np.zeros((4, 4), dtype='uint8')

  3. # 通过函数copy()实现深拷贝
  4. B1 = A1.copy()

  5. B1[1, 1] = 1
复制代码

运行结果如下:

从运行结果中可以看出,对B1[1, 1]的修改没有影响到A中对应元素的值,所以通过方法cpoy()实现的是深拷贝。

3 创建和原矩阵大小一样、通道一样,但是数据类型和原矩阵不一样的全0矩阵
示例代码如下:
  1. import numpy as np

  2. B = np.array([[[11, 12, 13, 14],
  3.                [15, 16, 17, 18]],
  4.               [[19, 20, 21, 22],
  5.                [23, 24, 25, 26]],
  6.               [[27, 28, 29, 30],
  7.                [31, 32, 33, 34]]])

  8. C = B
  9. C = 0*C
  10. C = C.astype('float32')
复制代码

运行结果如下:

注意:在2中提到通过“=”赋值得到的新ndarray对象和原对象共享存储空间(浅拷贝),但由于这里使用了乘法运算符,所以会为结果构建一个新的ndarray对象,并为其分配新的存储空间,所以通过上面代码的一系列操作得到的是深拷贝。

4 通过函数ones()、zeros()创建指定大小和数据类型且元素值全为1或0的二维或多维矩阵
我们可以通过函数ones()、zeros()创建二维或多维矩阵,比如我们可以通过下面这条语句创建二通道、三行、四列的三维矩阵。
示例代码如下:
4-1 创建元素值全为1的二维矩阵
  1. import numpy as np

  2. D = np.ones((3, 5), dtype='uint8')
复制代码

运行结果如下:


4-2 创建元素值全为0的二通道、三行、四列的三维矩阵
  1. import numpy as np

  2. D = np.zeros((2, 3, 4), dtype='uint8')
复制代码

运行结果如下:

                                          

                                          


从这个结果我们可以看出,第一个索引代表通道数(也称为页数),第二个索引代表行数,第三个索引代表列数。要特别注意,OpenCV的函数imread()读到的图像数据的三个索引值并不是这个顺序,详情见 https://www.hhai.cc/thread-89-1-1.html

4-3 创建元素值全为1的四维矩阵
  1. D = np.ones((2, 3, 4, 5), dtype='uint8')
复制代码


运行结果略。

5 创建指定大小、指定数据类型、数据值按均匀分布生成的整数矩阵
示例代码如下:
  1. F = np.random.randint(0, 100, (3, 5), dtype='uint8')
复制代码

运行结果略。

6 创建指定大小、数据值按正态分布(均值为0,标准差为1)生成的矩阵
  1. K = np.random.randn(2, 3)
复制代码

注意:函数randn()不能设置数据类型,也不能设置正态分布的均值和标准差,其原型如下:
  1. random.randn(d0, d1, ..., dn)
复制代码

运行结果如下:

从上图我们可以看出,得到的ndarray对象的数据类型为float64。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|昊虹AI笔记网 ( 蜀ICP备2022024117号-1 )

GMT+8, 2024-5-7 11:48 , Processed in 0.026631 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表