type
status
date
slug
summary
tags
category
icon
password
Property
目录
NumPy
最重要的一个特点是其N维数组对象ndarray
,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray
对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。ndarray
内部由以下内容组成:- 一个指向数据(内存或内存映射文件中的一块数据)的指针
- 数据类型或
dtype
,描述在数组中的固定大小值的格子
- 一个表示数组形状(
shape
)的元组,表示各维度大小的元组
- 一个跨度元组(
stride
),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中obj[::-1]
或obj[:,::-1]
就是如此
type
status
date
slug
summary
tags
category
icon
password
Property
目录
ndarray
对象的内容可以通过索引或切片来访问和修改,与Python
中list
的切片操作一样。NumPy
比一般的Python
序列提供更多的索引方式。除了之前的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引简单索引和切片
ndarray
数组可以基于0 - n
的下标进行索引,切片对象可以通过内置的slice
函数,并设置start, stop
及step
参数进行,从原数组中切割出一个新数组:也可以通过冒号分隔切片参数
start:stop:step
来进行切片操作:type
status
date
slug
summary
tags
category
icon
password
Property
NumPy 迭代器对象
numpy.nditer
提供了一种灵活访问一个或者多个数组元素的方式。迭代器最基本的任务的可以完成对数组元素的访问。
使用
arange()
函数创建一个 2X3 数组,并使用nditer
对它进行迭代以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)。
这反映了默认情况下只需访问每个元素,而无需考虑其特定顺序。可以通过迭代上述数组的转置来看到这一点,并与以 C 顺序访问数组转置的 copy 方式做对比:
type
status
date
slug
summary
tags
category
icon
password
Property
简单来说, 最外面的括号代表着 axis=0,依次往里的括号对应的 axis 的计数就依次加1。什么意思呢?下面再来解释一下
最外面的括号就是
axis=0
,里面两个子括号axis=1
。 操作方式:如果指定轴进行相关的操作,那么他会使用轴下的每个直接子元素的第0个,第1个,第2个...分别进行相关的操作现在我们用刚刚理解的方式来做几个操作。比如现在有一个二维的数组
求x数组在axis=0和axis=1两种情况下的和:
为什么得到的是[2,4]呢,原因是按照
axis=0
的方式进行相加,那么就会把最外面轴下的所有直接子元素中的第0个位置进行相加,第1个位置进行相加...依此类推,得到的就是0+2
以及2+3
,然后进行相加,得到的结果就是[2,4]
按照
axis=1
的方式进行相加,那么就会把轴为1里面的元素拿出来进行求和,得到的就是0,1
,进行相加为1
,以及2,3
进行相加为5
,所以最终结果就是[1,5]
了type
status
date
slug
summary
tags
category
icon
password
Property
在几乎所有的机器上,多字节对象都被存储为连续的字节序列。字节顺序,是跨越多字节的程序对象的存储规则。
- 大端模式:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
- 小端模式:指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
例如在 C 语言中,一个类型为 int 的变量 x 地址为 0x100,那么其对应地址表达式&x的值为 0x100。且x的四个字节将被存储在存储器的 0x100, 0x101, 0x102, 0x103位置。
numpy.ndarray.byteswap()
将 ndarray 中每个元素中的字节进行大小端转换