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

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

目录

  • 1 直接赋值初始化一个ndarray对象
  • 2 浅拷贝与深拷贝
    • 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对象

示例代码如下:

A = np.array([[1, 2, 3, 4, 5],[6, 7, 8, 9, 10],[11, 12, 13, 14, 15],[16, 17, 18, 19, 20],[21, 22, 23, 24, 25]], dtype='int8')

上面代码中的第二个参数dtype是可选的,如果不填,则系统根据矩阵元素的数据大小来确定。

上面的代码创建的是二维矩阵,我们再看一个创建三维矩阵的例子。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as npB = np.array([[[11, 12, 13, 14],[15, 16, 17, 18]],[[19, 20, 21, 22],[23, 24, 25, 26]],[[27, 28, 29, 30],[31, 32, 33, 34]]])

运行结果如下图所示:

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


2 浅拷贝与深拷贝

2-1 通过"="赋值初始化一个新的ndarray对象(浅拷贝)

示例代码如下:

import numpy as npB = np.array([[[11, 12, 13, 14],[15, 16, 17, 18]],[[19, 20, 21, 22],[23, 24, 25, 26]],[[27, 28, 29, 30],[31, 32, 33, 34]]])C = BC[0, 0, 0] = 100

运行结果如下所示:


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

2-2 通过copy()方法实现深拷贝

示例代码如下:

import numpy as npA1 = np.zeros((4, 4), dtype='uint8')# 通过函数copy()实现深拷贝
B1 = A1.copy()B1[1, 1] = 1

运行结果如下:

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

3 创建和原矩阵大小一样、通道一样,但是数据类型和原矩阵不一样的全0矩阵

示例代码如下:

import numpy as npB = np.array([[[11, 12, 13, 14],[15, 16, 17, 18]],[[19, 20, 21, 22],[23, 24, 25, 26]],[[27, 28, 29, 30],[31, 32, 33, 34]]])C = B
C = 0*C
C = C.astype('float32')

运行结果如下:

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

4 通过函数ones()、zeros()创建指定大小和数据类型且元素值全为1或0的二维或多维矩阵

我们可以通过函数ones()、zeros()创建二维或多维矩阵,比如我们可以通过下面这条语句创建二通道、三行、四列的三维矩阵。
示例代码如下:

4-1 创建元素值全为1的二维矩阵

import numpy as npD = np.ones((3, 5), dtype='uint8')

运行结果如下:

4-2 创建元素值全为0的二通道、三行、四列的三维矩阵

import numpy as npD = np.zeros((2, 3, 4), dtype='uint8')

运行结果如下:


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

4-3 创建元素值全为1的四维矩阵

D = np.ones((2, 3, 4, 5), dtype='uint8')

5 创建指定大小、指定数据类型、数据值按均匀分布生成的整数矩阵

示例代码如下:

F = np.random.randint(0, 100, (3, 5), dtype='uint8')

运行结果略。

6 创建指定大小、数据值按正态分布(均值为0,标准差为1)生成的矩阵

K = np.random.randn(2, 3)

注意:函数randn()不能设置数据类型,也不能设置正态分布的均值和标准差,其原型如下:

random.randn(d0, d1, ..., dn)

运行结果如下:

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

Python的Numpy库的ndarray对象常用构造方法及初始化方法相关推荐

  1. Python:numpy库中的一些函数简介、使用方法之详细攻略

    Python:numpy库中的一些函数简介.使用方法之详细攻略 目录 numpy库中的一些函数简介.使用方法 1.np.concatenate() 1.1.函数案例 1.2.函数用法 numpy库中的 ...

  2. Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值?

    Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值? Python_Numpy库的ndarray对象的常用属性有如下这些: ndim-矩阵的维度: shape-矩阵的形状: ...

  3. numpy库中ndarray切片操作的参数意义

    ndarray切片操作的规则总结出来叫做"三帽号规则" 三帽号规则即:[开始索引:结尾索引:步长],并且切片区间是左闭右开的,即"开始索引:结尾索引"表示的区间 ...

  4. python的 numpy库学习总结和介绍(超详细)模块

    目录 前言 numpy是什么? 一.创建数据容器 1.np.array(),通过传递一个列表,元祖来创建 2.np.zeros(),np.ones(),np.empty(),np.full(),传递对 ...

  5. python 的numpy库中的mean()函数用法介绍

    这篇文章主要介绍了python 的numpy库中的mean()函数用法介绍,具有很好对参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 mean() 函数定义: 2 mean()函数功能: 求取均 ...

  6. [转载] Python里面numpy库中zeros()的一些问题

    参考链接: Python中的numpy.zeros Python里面numpy库中zeros函数的一些问题 定义 本文记录了在使用numpy库中的zeros函数时遇到的一些问题 定义 用法:zeros ...

  7. Python的Numpy库的函数astype()在将大范围数据类型转换为小范围数据类型时并不是做饱和(saturate)操作(附实现饱和操作的方法)

    Python的Numpy库的函数astype()在将大范围数据类型转换为小范围数据类型时并不是做饱和(saturate)操作. 关于什么是饱和操作,可以参看博文:https://blog.csdn.n ...

  8. dom对象常用的属性和方法有哪些?

    dom对象常用的属性和方法有哪些? 一.总结 一句话总结: 1.document属性和方法:document的属性有head,body之类,方法有各种获取element的方法 2.element的属性 ...

  9. JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题

    JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...

最新文章

  1. What is OPcache
  2. Kdevelop的简单使用和调试_JunJun~的博客-CSDN博客_kdevelop使用教程
  3. source insight c++ namespace 无法跳转解决方法
  4. html mint ui,vue mint-ui初次使用总结
  5. 8天 = 4万元奖金 + CNCC参会资助 | 2019科研文本理解比赛
  6. 《算法之道》精华 经典算法部分
  7. php ci框架 实例化类,php框架CI(codeigniter)自动加载与自主创建对象操作实例分析...
  8. 深度学习AI美颜系列---AI美颜磨皮算法一
  9. python整形浮点型_Python3基础 | 整型浮点型
  10. 论文阅读笔记:《Contextual String Embeddings for Sequence Labeling》
  11. C++ 标准库 —— random
  12. JAVA当中数组学习(初级)
  13. 刷armbian后必要的安装和配置
  14. 10000+TB 阿里网盘资源!够过年了吧?
  15. writeUP-[第五空间2019 决赛]PWN5(待进一步完善待研究内容)
  16. 《springboot学习》 十九 springboot集成mybatis-plus
  17. android中热更新模式,Android热更新与开启Instant Run
  18. AD中使叠在一起的元器件快速分开排列
  19. 2020年河南省计算机对口升学分数线,2020年河南省单招分数线出来了吗?
  20. vue-seamless-scroll的使用以及实例

热门文章

  1. html_div显示与隐藏相关内容
  2. Dropzone插件的使用(从前台到后台完整流程)
  3. 目标检测YOLO实战应用案例100讲-面向小样本的目标检测技术研究与应用
  4. buildroot概述及使用
  5. buildroot添加编译自定义APP源码的方法
  6. hyperledger fabric 2.2 智能合约开发环境准备
  7. python匹配数字开头的内容_python使用正则表达式匹配字符串开头并打印示例
  8. Xmanager Xshell中文乱码
  9. 嵌入式硬件系统电磁兼容设计
  10. 网管的职业有什么可能?