简介
numpy 包,是矩阵处理的核心包
ndarray
矩阵是一种数学定义,在编程模型上就是多维数组
numpy为此专门封装了一种数据模型ndarray
ndarray是一种由相同类型元素组成的多维数组ndarray的元素数量是预先定义的,创建后的ndarray的大小不能再发生变化
ndarray的核心属性
sharp
sharp属性是矩阵的形状,它由一个元组(Turple(x,y))表示x行y列
矩阵形状的修改
- 直接修改sharp属性
要求:修改后的元素总数(形状乘积)不变 - 通过
resharp函数修改
要求:修改后的元素总数(形状乘积)不变
注意,此时是以引用拷贝的方式创建一个新形状的数组,也就是修改任意一个数组中的元素都会同时影响两个数组
ndim
ndim属性是矩阵的维度(轴)个数,维度(轴)的个数也被称为秩
例如 形状(2,3)的两行三列的维度数是二,所以也可以称其为二维矩阵
size
size属性是矩阵的元素个数总数
size属性可以由sharp乘积计算
例如 形状(2,3)的 矩阵,其size个数就是2*3=6
dtype
dtype是描述矩阵元素类型的,一个矩阵有且仅有一个dtype
可以通过astype进行修改元素类型从而得到一个新的矩阵
数据类型
| 数据类型 | 类型缩写 | 说明 |
|---|---|---|
| int_ | 默认整形 | |
| intc | 等价于long的整形 | |
| int8 | i1 | 整型,一个字节,[-128,127] |
| int16 | i2 | 整型,两个字节,[-32768,32767] |
| int32 | i3 | 整型,四个字节,[-2^31,2^31-1] |
| int64 | i4 | 整型,八个字节,[-2^63,2^63-1] |
| uint8 | u1 | 整型(正数),一个字节,[0,255] |
| uint16 | u2 | 整型(正数),两个字节,[0,65535] |
| uint32 | u3 | 整型(正数),四个字节,[0,2^32-1] |
| uint64 | u4 | 整型(正数),八个字节,[0,2^64-1] |
| bool_ | 一个字节形成存储的布尔值(True或者False) | |
| float_ | 等价于float64 | |
| float16 | f2 | 半精度浮点数(2字节):1符号位+5位指数+10位小数部分 |
| float32 | f4或者f | 单精度浮点数(4字节):1符号位+8位指数+23位小数部分 |
| float64 | f8或者d | 双精度浮点数(8字节):1符号位+11位指数+52位小数部分 |
| complex_ | c16 | complex128的简写模式 |
| complex64 | c8 | 复数,由两个32位浮点数组成 |
| complex128 | c16 | 复数,由两个64位浮点数组成 |
| object | O | Python对象类型 |
| String_ | S | 固定长度的字符串类型(每个字符1个字节),比如创建一个长度为8的字符串,应该使用S8 |
| Unicode_ | U | 固定长度的unicode类型字符串(每个字符占用字节数由平台决定) |
itemsize
itemsize是矩阵中每个元素的字节数大小
例如 类型为float64的矩阵,每个元素的大小是8=64/8
ndarray的创建
array函数
import numpy as np
#
# array函数,从一个Python数组中创建矩阵
#
np.array([1,2,3])
# 输出结果
'''
array([1,2,3])
'''
#
# zeros函数,指定形状创建一个全零矩阵
#
np.zeros((3,3)) # sharp=(3,3) 三行三列
# 输出结果
'''
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
'''
#
# ones函数,指定形状创建一个全零矩阵
#
np.ones((2,3,3)) # sharp=(2,3,3) 两片三行三列 三维矩阵
# 输出结果
'''
array([[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]])
#
# arange函数,指定起始,结束,步长来创建一维矩阵(不包括终值)
#
np.arange(1,9,2) # 起始1,结束9(不含),步长2
# 输出结果
'''
array([1, 3, 5, 7])
'''
#
# linespace函数,根据开始,结束,总元素个数来创建一维矩阵(等差数列创建)
#
np.linespace(1,100,10,endpoint=False) # edpoint包括终值,默认false
# 输出结果
'''
array([1.e+001, 1.e+012, 1.e+023, 1.e+034, 1.e+045, 1.e+056, 1.e+067,
1.e+078, 1.e+089, 1.e+100])
'''
#
# logspace函数,根据开始,结束,总元素个数来创建一维矩阵(等比数列创建)
#
np.logspace(1,100,10)
# 输出结果
'''
array([1.e+001, 1.e+012, 1.e+023, 1.e+034, 1.e+045, 1.e+056, 1.e+067,
1.e+078, 1.e+089, 1.e+100])
'''
#
# random 函数组,根据形状使用随机数填充数据
#
np.random.randonint(1,9,(2,3)) #随机范围[1,9),形状(2,3)
# 输出结果
'''
array([[1, 7, 1],
[3, 4, 6],
[7, 5, 2]])
'''