当前位置: 首页 > news >正文

NumPy 系列(一):numpy 数组基础

导入 NumPy 时,通常给其一个别名“np”,即 import numpy as np。
NumPy 库中的函数,要在函数名前加上导入的库名 np. 才能使用。

1.1 数据类型

(1)整数型数组与浮点型数组
为克服列表的缺点,一个 NumPy 数组只容纳一种数据类型,以节约内存。为方便起见,可将 NumPy 数组简单分为整数型数组与浮点型数组。

import numpy as np
# 创建整数型数组
arr1=np.array([1,2,3]) # 元素若都是整数,则为整数型数组
print(arr1)
[1 2 3]
# 创建浮点型数组
arr2=np.array([1.0,2,3]) # 内含浮点数,则为浮点型数组
print(arr2)
[1. 2. 3.]

注意,使用 print 输出 NumPy 数组后,元素之间没有逗号,这有两个好处,
一是可以可将之与 Python 列表区分开来,二是避免逗号与小数点之间的混淆。

(2)同化定理
一个人的力量是无法改变全体的,在实际操作中要注意:

  • 往整数型数组里插入浮点数,该浮点数会自动被截断为整数;
  • 往浮点型数组里插入整数,该整数会自动升级为浮点数;
import numpy as np
arr1=np.array([1,2,3])
arr1[1]=10.0 # 插入浮点数,被截断,数组仍然为整数型
print(arr1)
[ 1 10  3]
arr2=np.array([1.0,2,3])
arr2[2]=32 # 插入整数型,被升级,数组仍为浮点数
print(arr2)
[ 1.  2. 32.]

(3)共同改变定理
同化定理告诉我们,整数型数组和浮点型数组之间的界限十分严格,那么如
何将这两种数据类型的数组进行相互转化呢?既然某一个人容易被集体所同化,
那只要全体共同改变,自然就可以成功。
整数型数组和浮点型数组相互转换,规范的方法是使用 .astype() 方法。

import numpy as np
arr1=np.array([1,2,3])
arr2=arr1.astype(float)
print(arr1)
print(arr2)
arr3=arr2.astype(int)
print(arr3)
[1 2 3]
[1. 2. 3.]
[1 2 3]

除了上述方法,只要满足共同改变定理,整数型数组和浮点型数组仍然可以
互相转换。最常见的是整数型数组在运算过程中升级为浮点型数组,示例如下。

import numpy as np
arr=np.array([1,2,3])
print(arr)
# 整数型数组与浮点数作运算
print(arr+0.0)
print(arr*1.0)
[1 2 3]
[1. 2. 3.]
[1. 2. 3.]
# 整数型数组遇到除法(即便是除以整数)
print(arr/1)
[1. 2. 3.]
# 整数型数组与浮点型数组做运算
int_arr=np.array([1,2,3])
float_arr=np.array([1.2,3,4])
print(int_arr+float_arr)
[2.2 5.  7. ]

整数型数组很好升级,但浮点型数组在运算过程中一般不会降级。

1.2 数组维度

(1)一维数组与二维数组
考虑到深度学习中三维及其以上的数组出现次数少,我们后续主要 讲 解
NumPy 中的一维数组和二维数组,学了一维和二维后,很好类推到三维。

  • 不同维度的数组之间,从外形上的本质区别是
    一维数组使用 1 层中括号表示;
    二维数组使用 2 层中括号表示;
    三维数组使用 3 层中括号表示。
  • 有些函数需要传入数组的形状参数,不同维度数组的形状参数为
    一维数组的形状参数形如: x 或 (x,) ;
    二维数组的形状参数形如: (x,y) ;
    三维数组的形状参数形如: (x,y,z) 。
  • 现在以同一个序列进行举例
    当数组有 1 层中括号,如[1 2 3],则其为一维数组,其形状是 3 或 (3,) ;
    当数组有 2 层中括号,如[[1 2 3]],则其为二维数组,其形状是 (1,3) ;
    当数组有 3 层中括号,如[[[1 2 3]]],则其为三维数组,其形状是 (1,1,3) ;
    这里用后面要讲的 np.ones( ) 函数进行演示,只因其刚好需要传入形状参数。
import numpy as np
arr1=np.ones(3) # 传入形状为3
print(arr1) # 造出一维数组(向量)
arr2=np.ones((1,3)) # 传入形状为(1,3)
print(arr2) # 造出二维数组
arr3=np.ones((1,1,3)) # 传入形状为(1,1,3)
print(arr3) # 造出三维数组
[1. 1. 1.]
[[1. 1. 1.]]
[[[1. 1. 1.]]]
print(arr1.shape)
print(arr2.shape)
print(arr3.shape)
(3,)
(1, 3)
(1, 1, 3)

大家可以随时留意一下数组的维度(通过中括号的数量),后面有些函数(比如数组的拼接函数)需要两个数组是同维度的。

(2)不同维度数组之间的转换

一维数组转二维数组,还是二维数组转一维数组,均要使用的是数组的重塑方法 .reshape( ) ,该方法需要传入重塑后的形状(shape)参数。
这个方法神奇的是,给定了其他维度的数值,剩下一个维度可以填-1,让它自己去计算。比如把一个 5 行 6 列的矩阵重塑为 3 行 10 列的矩阵,当列的参数10 告诉它,行的参数直接可以用-1 来替代,它会自己去用 30 除以 10 来计算。
首先,演示将一维数组升级为二维数组。

import numpy as nparr1=np.arange(10)
print(arr1)
arr2=arr1.reshape((-1,1))
print(arr2)
arr3=arr1.reshape((1,-1))
print(arr3)
[0 1 2 3 4 5 6 7 8 9]
[[0][1][2][3][4][5][6][7][8][9]]
[[0 1 2 3 4 5 6 7 8 9]]

这里给.reshape( )传入的形状参数是(1,-1),正常情况下我们都肯定是(1,10),
这里(1,-1)的含义是:行的参数是 1 行,列的参数-1 自己去除着算吧。

接着,演示将二维数组降级为一维数组。

import numpy as np
arr1=np.arange(10)
print(arr1)
arr2=arr1.reshape((-1,5))
print(arr2)
arr3=arr2.reshape(-1)
print(arr3)
[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4][5 6 7 8 9]]
[0 1 2 3 4 5 6 7 8 9]

这里给.reshape( )传入的形状参数是 -1 ,正常情况应该是 10,这里-1 的含
义是:反正是一维数组,形状直接自己去算吧。

现规定,本讲义中,将一维数组称为向量,二维数组称为矩阵。

http://www.dtcms.com/a/393583.html

相关文章:

  • VSCode 的 launch.json 配置
  • OpenLayers地图交互 -- 章节六:范围交互详解
  • 分布式专题——15 ZooKeeper特性与节点数据类型详解
  • 分布式专题——16 ZooKeeper经典应用场景实战(上)
  • Torch-Rechub学习笔记-task2
  • Hadoop分布式计算平台
  • hive调优系列-1.调优须知
  • 爆炸特效:Unity+Blender-01
  • 解决切换 Node 版本后 “pnpm 不是内部或外部命令”问题
  • flag使用错误出现bug
  • 【Kafka面试精讲 Day 20】集群监控与性能评估
  • SQL 注入攻防:绕过注释符过滤的N种方法
  • 微软常用运行库
  • 在Kubernetes(k8s)环境中无法删除持久卷(PV)和持久卷声明(PVC)的解决方案
  • 【连载7】 C# MVC 跨框架异常处理对比:.NET Framework 与 .NET Core 实现差异
  • 芯脉:面向高速接口的SoC架构与完整性设计<3>
  • ArrayList与LinkedList深度对比
  • AI IDE 综合评估:代码能力与上下文连续性深度分析
  • OceanBase备租户创建(一):通过CREATE STANDBY TENANT
  • C++ 多态:从概念到实践,吃透面向对象核心特性
  • ​​如何用 Webpack 或 Vite 给文件名(如 JS、CSS、图片等静态资源)加 Hash?这样做有什么好处?​​
  • QT-数据库编程
  • FastAPI + APScheduler + Uvicorn 多进程下避免重复加载任务的解决方案
  • 数据库造神计划第十八天---事务(1)
  • Docker在Linux中离线部署
  • 面阵vs线阵工业相机的触发方式有什么不同?
  • 【Hadoop】HBase:构建于HDFS之上的分布式列式NoSQL数据库
  • 拉取GitHub源码方式
  • 【国二】【C语言】改错题中考察switch的用法、do while执行条件的用法
  • 23种设计模式之【命令模式模式】-核心原理与 Java 实践