【NumPy】基础与数组创建
一、什么是Numpy
numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
二、ndarray的限制
数组的所有元素必须具有相同的数据类型。
一旦创建,数组的总大小就不能改变。
形状必须是“矩形”,而不是“锯齿状”。例如二维数组的每一行必须具有相同的列数。
三、ndarray的属性
(1)在Pycharm中要使用数组必须先安装numpy包
(2)如果在Pycharm中安装不上,可以考虑用cmd命令
第一步:conda env list
第二步:conda activate numpy-pandas
第三步:conda install numpy
(3)ndarray的常见属性
四、ndarray的创建方式
1、array()和asarray()
array():将输入数据转换为ndarray,会进行copy。
asarray():将输入数据转换为ndarray,如果输入本身是ndarray则不会进行copy。
【运行结果】
arr1的内存地址为1151335438480
arr2的内存地址为1151335438096
arr3的内存地址为1151335438480
发现arr1和arr3的内存地址一模一样,说明创建数组的时候,如果本身提供的就是数组,那么array()和asarray()最大的区别就是一个是创建,一个复制。
2、zeros()、ones()、emptys()
zeros():返回给定形状和类型的新数组,用0填充。
ones():返回给定形状和类型的新数组,用1填充。
empty():返回给定形状和类型的未初始化的新数组。(这个值是任意的)
这三个方法默认都是float64
【运行结果】
[[0. 0. 0. 0.]
[0. 0. 0. 0.]]
zeros_like():返回与给定数组具有相同形状和类型的0新数组。
ones_like():返回与给定数组具有相同形状和类型的1新数组。
empty_like():返回与给定数组具有相同形状和类型的未初始化的新数组。
【运行结果】
[[0. 0. 0. 0.]
[0. 0. 0. 0.]]
3、full()与full_like()
full():返回给定形状和类型的新数组,用指定的值填充。
full_like():返回与给定数组具有相同形状和类型的用指定值填充的新数组。
【运行结果】
[[5 5 5]
[5 5 5]]
[[9 9 9]
[9 9 9]]
4、arange()
arange():返回在给定范围内用均匀间隔的值填充的一维数组。
【运行结果】
[0 2 4 6 8]
5、linspace()和logspace()
linspace()
描述:返回指定范围和元素个数的等差数列。数组元素类型默认为浮点型。
基本语法:
linspace(start,stop,num,endpoint,dtype)注意事项:num表数组数量,endpoint为空默认是true,表示包括stop,若为false则为不包括stop
【运行结果】
[ 0. 2.5 5. 7.5 10. ]
[0. 2. 4. 6. 8.]
logspace()
描述:返回指定指数范围、元素个数、底数的等比数列。数组元素类型默认为浮点型。
基本语法:
logspace(start,stop,num,endpoint,base,dtype)注意事项:num表数组数量,endpoint为空默认是true,表示包括stop,若为false则为不包括stop,base表示底数
【运行结果】
[ 4. 8. 16. 32.]
6、创建随机数数组
random.rand()
功能:返回给定形状的数组,用 [0, 1) 上均匀分布的随机样本填充。
【运行结果】
[[0.85337406 0.67349301 0.76903317]
[0.25514001 0.47133749 0.19264306]]
random.randint()
功能:返回给定形状的数组,用从低位(包含)到高位(不包含)上均匀分布的随机整数填充。
【运行结果】
[[7 3 1]
[5 4 3]]
五、ndarray的数据类型
创建数组时可以使用dtype参数指定元素类型
也可以使用ndarray.astype()方法转换数组的元素类型:
六、ndarray切片和索引
获取索引为2的数据
从索引2开始到索引9(不包含)停止,间隔为2
从索引2开始到最后,默认间隔为1
从索引2开始到索引9(不包含)结束,默认间隔为1
七、numpy常见函数
(一)基本函数
1、np.abs() 元素的绝对值
【运行结果】
[ 2 3 5 -2 -5 3]
[2 3 5 2 5 3]2、np.ceil() 向上取整
【运行结果】
[1.1 2.2 3.3 4.4 5.5 6.6]
[2. 3. 4. 5. 6. 7.]3、np.floor() 向下取整
【运行结果】
[1.1 2.2 3.3 4.4 5.5 6.6]
[1. 2. 3. 4. 5. 6.]4、np.rint()四舍五入
【运行结果】
[1.1 2.2 3.3 4.4 5.5 6.6]
[1. 2. 3. 4. 6. 7.]5、np.multiply() 元素相乘
【运行结果】
[[1 2]
[3 4]]
[[ 1 4]
[ 9 16]]
6、np.divide() 元素相除
【运行结果】
[[1 2]
[3 4]]
[[0.5 1. ]
[1.5 2. ]]7、np.where(condition, x, y) 三元运算符
运行结果
[55 55 66 66]
(二)统计函数

(三)比较函数

【运行结果】
True
False
(四)排序函数
默认排序(axis=1):按行排序
【运行结果】
[[1 2 6]
[3 4 6]
[1 3 9]]axis=1排序:案列排序
【运行结果】
[[1 1 3]
[6 2 4]
[9 3 6]]
(五)去重函数
计算唯一值并返回有序结果。
【运行结果】
[[2 0 0]
[3 0 2]
[0 3 0]]
[0 2 3]
八、基本运算
1、数组与数组之间的运算
【运行结果】
[[5 7 9]
[5 7 9]]
[[-3 -3 -3]
[ 3 3 3]]
[[ 4 10 18]
[ 4 10 18]]
[[0.25 0.4 0.5 ]
[4. 2.5 2. ]]
2、数组与标量之间的运算
【运行结果】
[[101 102 103]
[104 105 106]]
[[-99 -98 -97]
[-96 -95 -94]]
[[100 200 300]
[400 500 600]]
[[0.01 0.02 0.03]
[0.04 0.05 0.06]]
3、numpy数组的广播规则:为了让不同形状的数组可以运算
规则1:维度对齐,小维数组左侧补1
例如:第一个数组是一维数组(3,),第二个数组是二维数组(3,1),那么第一个一维数组会左侧补1,变成(1,3)
规则2:同维数组,尺寸拓展(1变多)
例如:第一个数组是二维数组 (1,3),第二个数组是二维数组(3,1),那么两个数组都会变成(3,3)
规则3: 冲突报错(不是1)
例如:形状(2,3)的数组无法与形状(3,2)的数组直接进行元素级运算
九、矩阵乘法
【运行结果】
[[30 39]
[66 90]]


评论