【Numpy基础知识】数组的创建

news2025/3/15 14:33:16

介绍

来源:Numpy官网:https://numpy.org/doc/stable/user/basics.html

在这里插入图片描述

文章目录

      • 介绍
        • 导包
        • 【1】将Python序列转换为Numpy数组
        • 【2】通过已有的Numpy数组创建函数创建数组
        • 【3】复制、连接或者改变现有数组
        • 【4】从磁盘读取数组
        • 【5】使用字符串或缓冲区从原始字节创建数组
        • 【6】使用特殊的库函数

创建数组有 6 种常规机制:

  1. 从其他 Python 结构(即列表和元组)转换
  2. 内部 NumPy 数组创建函数(arange, ones, zeros 等)
  3. 复制、联接或改变现有数组
  4. 从磁盘读取阵列,无论是标准格式还是自定义格式
  5. 通过使用字符串或缓冲区从原始字节创建数组
  6. 使用特殊库功能(比如random)

导包

import numpy as np

【1】将Python序列转换为Numpy数组

NumPy数组可以使用Python序列(如列表和元组)进行定义。列表和元组分别使用 […] 和 (…) 定义。列表和元组可以定义 ndarray 创建:

数字列表将创建一个一维数组,

列表的列表将创建一个 2D 数组,

进一步嵌套的列表将创建更高维的数组。通常,任何数组对象在 NumPy 中都称为 ndarray。

a1D = np.array([1, 2, 3, 4])
a2D = np.array([[1, 2], [3, 4]])
a3D = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(a1D)
[1 2 3 4]
print(a2D)
[[1 2]
 [3 4]]
print(a3D)
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]

使用 numpy.array 定义新数组时,应考虑数组中元素的 dtype,可以显式指定。

如果你不小心dtype赋值,你可能会得到不需要的溢出

a = np.array([127, 128, 129], dtype=np.int8)
print(a)
[ 127 -128 -127]

8 位有符号整数表示从 -128 到 127 的整数。将 int8 数组分配给此范围之外的整数会导致溢出。

a = np.array([2, 3, 4], dtype=np.uint32)
b = np.array([5, 6, 7], dtype=np.uint32)
print(a)
[2 3 4]
print(b)
[5 6 7]
c_unsigned32 = a - b
print(c_unsigned32)  ## 这是无符号的情况
[4294967293 4294967293 4294967293]
c_unsigned32.dtype
dtype('uint32')
c_signed32 = a - b.astype(np.int32)
print(c_signed32)
[-3 -3 -3]
c_signed32.dtype
dtype('int64')

注意,当您对两个相同 dtype 的数组执行操作时:uint32,生成的数组是相同的类型。

当你使用不同的dtype执行操作时,NumPy将分配一个新的类型,该类型满足计算中涉及的所有数组元素,这里uint32都可以表示为int64 int32.

如果希望整数数组是特定类型,一定在创建数组时指定 dtype。

【2】通过已有的Numpy数组创建函数创建数组

NumPy 具有 40 多个内置函数,用于创建数组。这些函数可以根据它们创建的数组的维度大致分为三类:

  • 一维数组
  • 二维数组
  • 多维数组ndarrays

① 一维数组创建函数

numpy.arange 创建具有固定递增值的数组【最佳用法:arange(start , stop ,step)】

print(np.arange(10))
[0 1 2 3 4 5 6 7 8 9]
print(np.arange(2, 10, dtype=float))
[2. 3. 4. 5. 6. 7. 8. 9.]
print(np.arange(2, 3, 0.1))
[2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9]

在第三个示例中,数组为 dtype=float 以适应 0.1 的步长。由于舍入误差,有时会包括stop值。

numpy.linspace 将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。

print(np.linspace(1., 4., 6))
[1.  1.6 2.2 2.8 3.4 4. ]

此创建功能的优点是可以保证元素的数量以及起点和终点。前一个arange(start, stop, step)将不包括stop.

② 二维数组创建函数

np.eye(n, m) 定义了一个 2D 单位矩阵。其中 i=j(行索引和列索引相等)的元素为 1,其余元素为 0

print(np.eye(3))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
print(np.eye(3, 5))
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]]

numpy.diag 可以定义一个沿对角线具有给定值的方形 2D 数组,或者如果给定一个 2D 数组,则返回一个仅是对角线元素的一维数组。

print(np.diag([1, 2, 3]))
[[1 0 0]
 [0 2 0]
 [0 0 3]]
print(np.diag([1, 2, 3], 1))  # 上移
[[0 1 0 0]
 [0 0 2 0]
 [0 0 0 3]
 [0 0 0 0]]
print(np.diag([1, 2, 3], -1))  # 下移
[[0 0 0 0]
 [1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]]
a = np.array([[1, 2], [3, 4]])
print(a)
[[1 2]
 [3 4]]
print(np.diag(a))  ## 把二维数组的主对角线取出来了
[1 4]

vander(x, n) 将范德蒙德矩阵定义为 2D NumPy 数组。范德蒙德矩阵的每一列都是输入一维数组或列表或元组的递减x最高多项式阶数为 n-1。

V = [ 1 α 1 α 1 2 … α 1 n − 1 1 α 2 α 2 2 … α 2 n − 1 1 α 3 α 3 2 … α 3 n − 1 ⋮ ⋮ ⋮ ⋱ ⋮ 1 α m α m 2 … α m n − 1 ] V=\left[\begin{array}{ccccc} 1 & \alpha_1 & \alpha_1^2 & \ldots & \alpha_1^{n-1} \\ 1 & \alpha_2 & \alpha_2^2 & \ldots & \alpha_2^{n-1} \\ 1 & \alpha_3 & \alpha_3^2 & \ldots & \alpha_3^{n-1} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & \alpha_m & \alpha_m^2 & \ldots & \alpha_m^{n-1} \end{array}\right] V=1111α1α2α3αmα12α22α32αm2α1n1α2n1α3n1αmn1

print(np.vander(np.linspace(0, 2, 5), 2))
[[0.  1. ]
 [0.5 1. ]
 [1.  1. ]
 [1.5 1. ]
 [2.  1. ]]
print(np.vander([1, 2, 3, 4], 2))
[[1 1]
 [2 1]
 [3 1]
 [4 1]]
print(np.vander((1, 2, 3, 4), 4))
[[ 1  1  1  1]
 [ 8  4  2  1]
 [27  9  3  1]
 [64 16  4  1]]

此数组创建方式有助于生成线性最小二乘模型

③ 常规ndarray 创建函数

numpy.zeros 将创建一个填充 0 值的数组,具有指定的形状。默认 dtype 为 float64:

print(np.zeros((2, 3)))
[[0. 0. 0.]
 [0. 0. 0.]]
np.zeros((2, 3)).dtype
dtype('float64')
print(np.zeros((2, 3, 2)))
[[[0. 0.]
  [0. 0.]
  [0. 0.]]

 [[0. 0.]
  [0. 0.]
  [0. 0.]]]

numpy.ones 将创建一个填充 1 个值的数组。它在所有其他方面都与zeros相同:

print(np.ones((2, 3)))
[[1. 1. 1.]
 [1. 1. 1.]]
print(np.ones((2, 3, 2)))
[[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]

default_rng结果的random方法将创建一个填充 0 到 1 之间的随机值的数组。它包含在numpy.random库中。

from numpy.random import default_rng

print(default_rng(42).random((2, 3)))
[[0.77395605 0.43887844 0.85859792]
 [0.69736803 0.09417735 0.97562235]]
print(default_rng(42).random((2, 3, 2)))
[[[0.77395605 0.43887844]
  [0.85859792 0.69736803]
  [0.09417735 0.97562235]]

 [[0.7611397  0.78606431]
  [0.12811363 0.45038594]
  [0.37079802 0.92676499]]]

这就是伪随机

numpy.indices 将创建一组数组(堆叠为一个更高维度的数组),每个维度一个,每个维度代表该维度的变体:

print(np.indices((3, 3)))
[[[0 0 0]
  [1 1 1]
  [2 2 2]]

 [[0 1 2]
  [0 1 2]
  [0 1 2]]]

【3】复制、连接或者改变现有数组

创建数组后,可以复制、联接或更改这些现有数组以创建新数组。

将数组或其元素分配给新变量时,必须显式 numpy.copy 数组,否则变量是原始数组的视图。

a = np.array([1, 2, 3, 4, 5, 6])
print(a)
[1 2 3 4 5 6]
b = a[:2].copy()
print(b)
[1 2]
b += 1
print(b)
[2 3]
print(a)
[1 2 3 4 5 6]

copy深拷贝, 对拷贝出来的数组的操作不会影响原数组

有许多方法可以连接现有数组,例如numpy.vstack,numpy.hstack和numpy.vstacknumpy.hstack。numpy.block

使用block将四个 2 x 2 数组连接到 4 x 4 数组

A = np.ones((2, 2))
B = np.eye(2, 2)
C = np.zeros((2, 2))
D = np.diag((-3, -4))
print(A)
[[1. 1.]
 [1. 1.]]
print(B)
[[1. 0.]
 [0. 1.]]
print(C)
[[0. 0.]
 [0. 0.]]
print(D)
[[-3  0]
 [ 0 -4]]
print(np.block([[A, B], [C, D]]))
[[ 1.  1.  1.  0.]
 [ 1.  1.  0.  1.]
 [ 0.  0. -3.  0.]
 [ 0.  0.  0. -4.]]

【4】从磁盘读取数组

这是创建大型数组的最常见情况。详细信息在很大程度上取决于磁盘上数据的格式。

① 标准二进制格式

各种字段具有数组数据的标准格式。下面列出了具有已知 Python 库的那些来读取它们并返回 NumPy 数组


HDF5: h5py
FITS: Astropy

② 常见的ASCII格式

逗号分隔值 (csv) 和制表符分隔值 (tsv) 文件等分隔文件用于 Excel 和 LabView 等程序。

一个简单的例子给出了simple.csv:【见文件】

导入simple.csv是使用 loadtxt 完成的:

print(np.loadtxt("simple.csv", delimiter=',', skiprows=1))
[[0. 0.]
 [1. 1.]
 [2. 4.]
 [3. 9.]]

可以使用 scipy.io 和Pandas读取更通用的ASCII文件.

【5】使用字符串或缓冲区从原始字节创建数组

可以使用多种方法。如果文件具有相对简单的格式,则可以编写一个简单的I / O库,并使用NumPy fromfile()()函数和.tofile()方法直接读取和写入NumPy数组(请注意您的字节顺序!如果存在一个读取数据的好的 C 或 C++ 库,则可以使用各种技术包装该库,尽管这肯定需要更多的工作,并且需要更高级的知识才能与 C 或 C++ 接口【官方文档没有给栗子… 用的应该比较少】

【6】使用特殊的库函数

NumPy是Python Scientific Computing堆栈中数组容器的基本库。许多Python库,包括SciPy,Pandas和OpenCV,使用NumPyndarrays作为数据交换的通用格式,这些库可以创建,操作和使用NumPy数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Nodejs计算机毕业设计久宠宠物店管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

载天冬酰胺酶磺丁基-β-/酶羟丙基-β-/天门冬酰胺酶环/EGF/维生素E乙酸酯糊精脂质体制备

下面为大家整理的科研内容是载天冬酰胺酶磺丁基-β-/酶羟丙基-β-/天门冬酰胺酶环/EGF/维生素E乙酸酯糊精脂质体制备,和小编一起来看! 载天冬酰胺酶磺丁基-β-环糊精制备:采用逆向蒸发法制备ASDL,通过酸碱稳定性,热稳定性,抗胰蛋白酶稳定性,血…

【专业数据】七.2020~2022年北京交通大学【计算机技术】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率

文章目录 1.专业介绍2.2020-2022年国家线/复试线/分数线差2.1.数据总览2.2.数据指标2.2.1.复试分数线2.2.2.分数线差3.2020-2022年计划招生数/复试数/录取数/复试比例/录取率3.1.数据总览3.2.数据指标3.2.1.复试比例3.2.2.录取率4.参考资料欢迎订阅本专栏:《北交计算机复试经验…

写前端?Python有手就行...

前端除了用jscsshtml,还有没有其它办法?其实python也可以 爬它!(https://jq.qq.com/?_wv1027&keSp12WR5) 1. 安装与基本流程 安装 PyWebIO 和其他的第三方库一样使用pip install PyWebIO就行,没有…

云原生 | Kubernetes - 资源指标管道

目录 Metrics API 度量资源用量 CPU 内存 Metrics 服务器 对于 Kubernetes,Metrics API 提供了一组基本的指标,以支持自动伸缩和类似的用例。 该 API 提供有关节点和 Pod 的资源使用情况的信息, 包括 CPU 和内存的指标。如果将 Metrics …

【设计模式】适配器模式 (七)

文章目录5.2 适配器模式5.2.1 概述5.2.2 结构5.2.3 类适配器模式5.2.4 对象适配器模式5.2.5 应用场景5.2.6 JDK源码解析5.2 适配器模式 5.2.1 概述 如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此…

机器学习笔记之玻尔兹曼机(一)基本介绍

机器学习笔记之玻尔兹曼机——基本介绍引言回顾:玻尔兹曼机的模型表示模型参数的对数似然梯度关于模型参数W\mathcal WW的对数似然梯度关于模型参数L,J\mathcal L,\mathcal JL,J的对数似然梯度引言 在受限玻尔兹曼机——模型表示(Representation)一节中以玻尔兹曼机…

五环三萜类化合物环糊精包合物前体脂质体/呋喃硫胺/6已基环糊精纳米粒制备

小编在这里为大家分享的是五环三萜类化合物环糊精包合物前体脂质体/呋喃硫胺/6已基环糊精纳米粒,一起来看看吧! 五环三萜类化合物环糊精包合物前体脂质体制备方法: 通过环糊精将五环三萜类化合物包合提高亲水性,并以脂质体为载体进行包覆,通…

[Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)

文章目录线程概念进程和线程的关系线程的优点线程的缺点线程控制Linux线程和接口关系的认识线程创建线程ID及进程地址空间布局线程等待线程终止线程终止状态线程分离LWP和pthread_t线程概念 线程是在进程内部运行的一个执行分支(执行流),属于…

我会用12种编程语言,但是偏爱python,看完文章你就知道原因了

刚开始学编程,或者学习一门新的编程语言时,我们编写的第一个程序往往很简单,而且往往这个程序就是输出一个简单的文本。在阅读本文时,你可能心知肚明我指的是哪种最常见的文本。 没错,我说的就是 Hello world。 这段文…

当中医遇上AI,贝叶斯携手昇思打造AI舌诊联合方案

中医的困局 中医迄今已有数千年历史,是老祖宗留给我们最宝贵的财富之一。然而,随着近代医学技术的发展,与声势浩大的西医相比,中医逐渐失势。 近年来,人口老龄化导致慢性病发病率持续增高。国家层面出台《健康中国行…

生态类型 or 生境类型?16S全长测序判断河流中细菌群落构建机理

文献标题: Distinct composition and assembly processes of bacterial communities in a river from the Arid area: Ecotypes or Habitat Types? 研究背景 细菌群落在河流生态系统中起着重要的作用,如元素循环和有机物的降解等。对河流细菌群落的扰…

基于实时迭代的数值鲁棒NMPC双模稳定预测模型(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

还在用明文存储密码吗?快来了解一下加密吧

目录 一. 数据库为什么不能明文存储密码 二. MD5到底是什么? 2.1 MD5概述 2.2 MD5为什么不是加密算法? 2.3 MD5主要特点MD5 2.4 MD5的性质 2.5 为什么用MD5存储密码不好 三. 给密码加盐再落库,增加破解成本 四. BCrypt算法加密解密…

零入门容器云网络-8:网络虚拟设备之tun设备介绍

已发表的技术专栏(订阅即可观看所有专栏) 0  grpc-go、protobuf、multus-cni 技术专栏 总入口 1  grpc-go 源码剖析与实战  文章目录 2  Protobuf介绍与实战 图文专栏  文章目录 3  multus-cni   文章目录(k8s多网络实现方案) 4  gr…

SpringCloud(8)— 使用ElasticSearch(RestClient)

SpringCloud(8)— 使用ElasticSearch(RestClient) 一 认识RestClient ES 官方提供了各种语言的客户端用来操作ES,这些客户端的本质就是组创DSL语句,通过 Http 请求发送给ES 官方文档地址:Elasticsearch Clients | E…

运维基础(上部)

运维基础【(上部)】 因为笔记所记内容太多,所以我分成了上下两部分来分享给大家查看学习!同时我会持续更新博客发布更加优质的文章,希望大家多多支持与关注!感谢! 一、运维概述 1、运维岗位的收…

[附源码]计算机毕业设计Python港口集团仓库管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

GitLab Runner的使用

一、初次使用GitLab Runner 特别说明:前面已经将本地项目成功推送到了GitLab中,并且已经注册了一个GitLab Runner,接下来就是使用GitLab Runner。 触发GitLab Runner以完成GitLab的CI(持续集成)/CD(持续部署),需满足下述两个条件: 仓库根目录下面存在有.gitlab-ci.yml文…

[ Linux ] 互斥量实现原理,线程安全

上篇文章我们对抢票系统做了加锁处理,对互斥量tickets进行加锁。而本篇博文来谈谈互斥量实现的原理以及相关问题。 目录 1.上篇遗留问题 我们在临界资源对应的临界区中加锁了,就不是多行代码了吗?如果还是多行代码,难道不会被切…