重在数值计算
数组和列表的区别:
1、列表可以存不同类型的数据;数组必须存同一类型的数据
2、优先级:字符串 > 浮点型 > 整型
创建numpy数组的三种方法:
1、各种已封装好的基础矩阵
zeros()、ones()、linespace()、arange()、random()
import numpy as np
np.zeros((3,4))
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.ones(shape=(3,4))
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
np.linspace(0,100,num=20) # 一维等差数列 闭区间
array([ 0. , 5.26315789, 10.52631579, 15.78947368,
21.05263158, 26.31578947, 31.57894737, 36.84210526,
42.10526316, 47.36842105, 52.63157895, 57.89473684,
63.15789474, 68.42105263, 73.68421053, 78.94736842,
84.21052632, 89.47368421, 94.73684211, 100. ])
np.arange(0,50,step=2) # 一维等差数列 左开右闭
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,
34, 36, 38, 40, 42, 44, 46, 48])
np.random.randint(0,100,size=(3,4))
array([[ 1, 86, 89, 90],
[54, 9, 92, 52],
[49, 59, 55, 14]])
# -1到1之间的随机数
np.random.random((3,4))
2、将外部的一张图片的数据读取加载到numpy数组中
import matplotlib.pyplot as plt
img_arr = plt.imread('./1.jpg') # 返回的是数组,数组中装载的是图片内容[行,列,颜色]
plt.imshow(img_arr) # 将numpy数组进行可视化展示
3、使用array()创建一个数组
import numpy as np
arr = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
数组的一些属性
arr.dtype # 返回的是数组里元素的类型
dtype('int32')
type(arr) # 返回的是数组的类型
numpy.ndarray
切片
# 切出arr数组的前两行数据
arr[0:2] # arr[行切片]
array([[1, 2, 3],
[4, 5, 6]])
# 切出arr数组的前两列数据
arr[:,0:2] # arr[行切片,列切片]
array([[1, 2],
[4, 5],
[7, 8]])
倒置
# 行倒置
arr[::-1]
array([[7, 8, 9],
[4, 5, 6],
[1, 2, 3]])
# 列倒置
arr[:,::-1]
array([[3, 2, 1],
[6, 5, 4],
[9, 8, 7]])
# 行、列都倒置(所有元素都倒置)
arr[::-1,::-1]
array([[9, 8, 7],
[6, 5, 4],
[3, 2, 1]])
数组倒置应用在由图片数据构成的数组中时,行倒置=图片上下翻转,列倒置=图片左右翻转
变形reshape
# 二维变一维
arr_1 = arr.reshape((9,)) # 原本是3x3的数组,变成一维后,元素必须还是9,不能多也不能少
arr_1
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
# 把矩阵拉成一个向量
arr.ravel()
# 一维变二维
arr_2 = arr_1.reshape((3,3))
arr_2
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr_1.reshape((3,-1)) # 这个“-1”意思是有了元素总数,让python自己算第二个维度的长度
级联操作concatenate()
- 将多个numpy数组进行横向或纵向的拼接
- axis轴向的理解
0:列 纵向拼接(默认)
1:行 横向拼接
np.concatenate((arr,arr))
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 竖着拼
np.vstack((arr,arr))
np.concatenate((arr,arr),axis=1)
array([[1, 2, 3, 1, 2, 3],
[4, 5, 6, 4, 5, 6],
[7, 8, 9, 7, 8, 9]])
# 横着拼
np.hstack((arr,arr))
常见的聚合操作
sum, max, min, mean
arr.sum()
45
arr.sum(axis=0) # 各列的和
array([12, 15, 18])
arr.sum(axis=1) # 各行的和
array([ 6, 15, 24])
arr.max()
9
常用的数学函数
- sin() cos() tan()
- numpy.around(a,decimals)函数返回a的四舍五入值
- a:数组
- decimals:舍入的小数位数。默认为0。如果是负数,整数将四舍五入到小数点左侧的位置
np.sin(2.5)
0.5984721441039564
np.around(3.84,1)
3.8
np.around(3.84,-1)
0.0
np.around(3.84)
4.0
常用的统计函数
- 标准差std()
- 方差var()
arr[1]
array([4, 5, 6])
arr[1].std()
0.816496580927726
arr[1].var()
0.6666666666666666
读数据
import numpy as np
np.genfromtxt("文件路径和文件名",delimiter="分隔符",dtype=str)
查看帮助文档
print(help(函数))
强制转换类型
numpy.array.astype(类型)
矩阵常用操作
A = np.array([[1,1],
[0,1]])
B = np.array([[2,0],
[3,4]])
# 对应位置的元素相乘 *
A*B
array([[2, 0],
[0, 4]])
# 矩阵乘法 dot 以下两种方法一样
A.dot(B)
np.dot(A,B)
array([[5, 4],
[3, 4]])
# e的多少次幂
np.exp(A)
array([[2.71828183, 2.71828183],
[1. , 2.71828183]])
# 开根号
np.sqrt(A)
array([[1., 1.],
[0., 1.]])
# 向下取整
np.floor(A)
array([[1., 1.],
[0., 1.]])
# 切矩阵
np.hsplit(a,3) #切成横着的3个平均的部分
np.hsplit(a,(3,4)) # 指定刀位 Split a after the third and the fourth column
np.vsplit(a,3)
复制
# id一样,值也一样
a = np.arange(12)
b = a
print(b is a)
print(id(a))
print(id(b))
True
3019571916192
3019571916192
# id不一样,但值是一样的
c = a.view()
print(c is a)
c[0] = 1234
print(a)
print(id(a))
print(id(c))
False
[1234 1 2 3 4 5 6 7 8 9 10 11]
3019571916192
3019571956272
# id不一样,值也不一样
a = np.arange(12)
d = a.copy()
print(d is a)
d[0] = 555
print(a)
print(id(a))
print(id(d))
False
[ 0 1 2 3 4 5 6 7 8 9 10 11]
3019571956992
3019571955632
# 返回值最大的那个元素的索引
ind = data.argmax(axis=0) #按列
# 再取出值
data_max = data[ind, range(data.shape[1])]
ndarray扩展
a = np.arange(0,40,10)
print(a)
print("---------------------------")
b = np.tile(a, (2,2))
print(b)
[ 0 10 20 30]
---------------------------
[[ 0 10 20 30 0 10 20 30]
[ 0 10 20 30 0 10 20 30]]
排序
print("1、按行从小到大排序:")
a = np.array([[4, 3, 5],
[1, 2, 1]])
b = np.sort(a, axis=1)
print(b)
print("2、返回从小到大的元素在原ndarray的索引:")
a = np.array([4, 3, 1, 2])
j = np.argsort(a)
print(j)
print("按j索引取出从小到大的序列")
print(a[j])
1、按行从小到大排序:
[[3 4 5]
[1 1 2]]
2、返回从小到大的元素在原ndarray的索引:
[2 3 1 0]
按j索引取出从小到大的序列
[1 2 3 4]