IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> numpy之多维数组 -> 正文阅读

[游戏开发]numpy之多维数组


NumPy的核心特征之一就是N-维数组对象—— ndarray。ndarray是Python中一个快速、灵活的大型数据集容器,数组允许你使用类似于标量的操作语法在整块数据上进行数学计算。

一个ndarray是一个通用的多维同类数据容器,也就是说,它包含的每一个元素均为相同类型。每一个数组都有一个shape属性,用来表征数组每一维度的数量;每一个数组都有一个dtype属性,用来描述数组的数据类型。

“数组”、“NumPy数组”或“ndarray”时,他们都表示同一个对象:ndarray对象。

一、生成ndarray

生成数组最简单的方式就是使用array函数。array函数接收任意的序列型对象(当然也包括其他的数组),生成一个新的包含传递数据的NumPy数组:

data = [1, 2, 3, 4, 5]
arr = np.array(data)
arr # 结果:array([1, 2, 3, 4, 5])

如果是嵌套序列,例如同等长度的列表,将会自动转换成多维数组:

data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr = np.array(data)
arr # 结果:array([[1, 2, 3, 4, 5],
      			  [1, 2, 3, 4, 5]])
   
arr.shape # 结果:(2, 5)

除了np.array,还有很多其他函数可以创建新数组。例如,给定长度及形状后,zeros可以一次性创造全0数组,ones可以一次性创造全1数组。empty则可以创建一个没有初始化数值的数组。

arange是Python内建函数range的数组版:

np.arange(10) # 结果:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

二、ndarray的数据类型

数据类型,即dytpe,是一个特殊的对象,它包含了ndarray需要为某一种类型数据所申明的内存块信息(也称为元数据,即表示数据的数据):

data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr = np.array(data, dtype='float')
arr.dtype # 结果:dtype('float64')

在这里插入图片描述
可以使用astype方法显式地转换数组的数据类型:

data = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
arr1 = np.array(data, dtype='float')
arr2 = arr1.astype(np.int32)
arr2.dtype # 结果:dtype('int32')

要注意,传入astype的最好是np.int32之类的,而不是np.int,否则会有警告。

三、索引和切片

3.1 一维数组的索引

一维数组比较简单,看起来和Python的列表很类似,但数组的切片是原数组的视图,这意味着数据并不是被复制了,任何对于视图的修改都会反映到原数组上:

a = np.array([1, 2, 3, 4])
b = a[0:2] 
b[0] = 0
a # 结果:array([0, 2, 3, 4])

如果想要一份数组切片的拷贝而不是一份视图的话,必须使用copy显式地复制这个数组:

a = np.array([1, 2, 3, 4])
b = a[0:2].copy()
b[0] = 0
a # 结果:array([1, 2, 3, 4]),未改变原数组
b # 结果:array([0, 2])

3.2 多维数组的索引

在这里插入图片描述
在一个二维数组中,每个索引值对应的元素不再是一个值,而是一个一维数组:

a = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
a # 结果:array([[1, 2, 3, 4],
                 [3, 4, 5, 6]])
a[0] # 结果:array([1, 2, 3, 4])

有两种方法获取单个元素:

a = np.array([[1, 2, 3, 4], [3, 4, 5, 6]])
a # 结果:array([[1, 2, 3, 4],
                 [3, 4, 5, 6]])
a[0][2] # 结果:3
a[0, 2] # 结果:3

也可以进行多组切片:

a = np.array([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8]])
a # 结果:array([[1, 2, 3, 4],
                 [3, 4, 5, 6],
       			 [5, 6, 7, 8]])
a[:2, 1:] # 结果:array([[2, 3, 4],
      					 [4, 5, 6]])

3.3 布尔索引

在索引数组时可以传入布尔值数组,布尔值数组的长度必须和数组轴索引长度一致(当布尔值数组的长度不正确时,布尔值选择数据的方法并不会报错):

a = np.array([[1, 2, 3, 4], [3, 4, 5, 6], [5, 6, 7, 8], [7, 8, 9, 10]])
a # 结果:array([[ 1,  2,  3,  4],
      			 [ 3,  4,  5,  6],
     			 [ 5,  6,  7,  8],
      			 [ 7,  8,  9, 10]])

b = np.array(['dog', 'cat', 'dog', 'pig']) # 如果此处不用数组的话,下面的只会输出False
b == 'dog' # 结果:array([ True, False,  True, False])

a[b == 'dog'] # 结果:array([[1, 2, 3, 4],
      						 [5, 6, 7, 8]])

可以在条件表达式前使用对条件取反:

a[~(b == 'dog')] # 结果:array([[ 3,  4,  5,  6],
     						    [ 7,  8,  9, 10]])

如果有多个布尔值条件,可以用数学操作符如&(表示并)、|(表示或)连接(每个布尔值条件要用小括号),但不能用and或or:

a[(b == 'dog') | (b == 'pig')] # 结果:array([[ 1,  2,  3,  4],
     										  [ 5,  6,  7,  8],
    										  [ 7,  8,  9, 10]])

也可以基于常识来设置布尔值数组的值,比如将小于5的数都变为5:

a[a < 5] = 5
a # 结果:array([[ 5,  5,  5,  5],
      			 [ 5,  5,  5,  6],
     			 [ 5,  6,  7,  8],
       			 [ 7,  8,  9, 10]])
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:44:41  更:2022-04-01 23:46:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/29 20:54:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码