码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python的Numpy库的ndarray对象常用构造方法及初始化方法


    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')
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    import numpy as np
    
    B = 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]]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果如下图所示:
    在这里插入图片描述
    从其shape属性可以看出,B矩阵的尺寸为三通道,两行,四列。其内容如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2 浅拷贝与深拷贝

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

    示例代码如下:

    import numpy as np
    
    B = 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, 0, 0] = 100
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下所示:
    在这里插入图片描述
    在这里插入图片描述
    从上图的结构中我们可以看到,对于ndarray对象,通过“=”赋值得到的新对象和原对象共用数据存储区,即实现的是浅拷贝,修改其中一个对象的数据值会影响到另一个对象的数据值。

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

    示例代码如下:

    import numpy as np
    
    A1 = np.zeros((4, 4), dtype='uint8')
    
    # 通过函数copy()实现深拷贝
    B1 = A1.copy()
    
    B1[1, 1] = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行结果如下:
    在这里插入图片描述
    从运行结果中可以看出,对B1[1, 1]的修改没有影响到A中对应元素的值,所以通过方法cpoy()实现的是深拷贝。

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

    示例代码如下:

    import numpy as np
    
    B = 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')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

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

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

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

    import numpy as np
    
    D = np.ones((3, 5), dtype='uint8')
    
    • 1
    • 2
    • 3

    运行结果如下:
    在这里插入图片描述

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

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

    运行结果如下:
    在这里插入图片描述
    在这里插入图片描述

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

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

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

    在这里插入图片描述

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

    示例代码如下:

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

    运行结果略。

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

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

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

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

    运行结果如下:
    在这里插入图片描述
    从上图我们可以看出,得到的ndarray对象的数据类型为float64。

  • 相关阅读:
    linux环境nacos单击与集群部署
    Mysql 讲解所有的约束类型
    【JavaEE】_JavaScript简单使用
    25-多线程
    Meta Llama 3 里面装饰器
    Halcon 阈值算子汇总
    一套.Net6可落地的微服务、分布式开源项目
    i.MX 6ULL 驱动开发 三:字符设备驱动框架实现和调试
    LeetCode:261. 以图判树 - Python
    ECS模式
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/127747139
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号