数组(矢量化运算库的核心类型)
1.numpy中的数组实际上就是numpy.ndarray类类型的对象,用于表示任意维度的数据结构.
其维度信息通过shape属性访问,ndarray是一个通用的同构数据多维容器,其中所有的元素必须是相同类型.
该对象由两部分组成:
A.实际数据:数组元素本身
B.元数据:对实际数据类型,结构等信息的描述
创建数组的两个常用函数:
numpy.arange(起始值, 终止值, 步长)-> 获得数组对象
缺省起始值取0,缺省步长为1
numpy.array(任何同质容器)-> 获得数组对象
所创建数组的维度与参数容器的维度严格一致.
每个数组都有一个shape属性,一个用于表示各维度大小的元组.
2.numpy中的数组可以使用基0的下标访问其中的元素.
通过len()/numpy.ndarray.size获取元素个数.对于高维数组,
python中的len()返回的是第一维的维数.
而size返回的是所有维数的乘积
3.数组的维度可以在定义以后根据需要在合理的前提下做出调整:
reshape((新维度))/shape=新维度,
第一种方法并不会改变调用数组的维度,而是得到一个新的数组,
第二种方法直接修改了所操作的数组对象本身
4.ndarray对象的dtype属性反映了元素的数据类型.可以通过该属性读取或修改数组元素的数据类型.
数组对象.astype(新数据类型) -> 新数组对象
5.numpy的内置数据类型
1)布尔:bool8/bool_
2)整型:int8/int16/int32/int64
intN: [-2^(N-1), 2^(N-1)-1]
int8: [-128, 127]
uint8/uint16/uint32/uint64 #无符号整型
uintN: [0, 2^N-1]
uint8: [0, 255]
3)浮点型:float16/float32/float64/float96/float128
#float96/float128只在个别操作系统上才有
4)复数: complex64/complex128
5)字符串: str_
#字符串就是一个unicode序列
6.numpy的类型字符码
? - 布尔
i - 有符号整型
u - 无符号整型
f - 浮点
c - 复数
U - 字符串
M - 日期时间
O - Python对象
7.numpy的类型字符串
<字节序><维度><类型字符码><字节数>
>表示:大端字节序
<表示:小端字节序
=表示:系统字节序
代码:dtype.py
在内存中双字0x01020304(DWORD)的存储方式
内存地址
4000&4001&4002&4003
LE 04 03 02 01
BE 01 02 03 04
8.切片
数组[起始:终止:步长, 起始:终止:步长,...]
#在每个维度上使用切片
缺省起始:步长>0时, 首元素; 步长<0时,尾元素
缺省终止:步长>0时, 尾元素后; 步长<0时,首元素前
缺省步长:1
某几个维度全部使用缺省值时可以用"..."表示
9.展平: 任意维度 -> 一维
1)a.ravel() ->返回a数组的一维视图(数据还是a数组的数据)
2)a.flatten() ->返回a数组的一维副本(flatten会请求分配内存来保存结果)
10.转置:
数组.transpose()->转置视图方法
数组.T: 转置视图属性
至少是二维数组才支持转置.
代码:trans.py
11.组合与拆分
垂直组合: vstack((上, 下))
#除了合并轴上的维度,其它维度必须相等
垂直分割: vsplit(数组, 分割数) -> 子数组元组
水平组合: hstack((左, 右))
水平分割: hsplit(数组, 分割数) -> 子数组元组
深度组合: dstack((前, 后))
深度分割: dsplit(数组, 分割数) -> 子数组元组
行组合: row_stack((上, 下))
列组合: column_stack((左, 右))
12.数组的属性
dtype - 元素类型
shape - 数组维度
T - 转置视图
size - 元素个数
ndim - 数组维数
itemsize - 每个元素字节数
nbytes - 数组总字节数 = size * itemsize
real - 实部数组
imag - 虚部数组
flat - 扁平迭代器
flat属性将返回一个numpy.flatiter对象.
numpy.ndarray.tolist() -> 返回列表对象