版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36890572/article/details/82960589
Numpy库是Python的一种开源的数字拓展,可以用来存储和处理大型矩阵
1. 优点
① 多维数组ndarray,元素级计算,运算快;
② 数据读写方便;
2. 特点
① 数组定义的时候大小固定;
② 存储元素为同质(同种数据类型);
3. 数据的生成(numpy支持多种数据类型)
a. 使用列表或元组数据构造
# 1.1 列表
arr1 = np.array([[1,2],[3,4]])
print(arr1)
'''
[[1 2]
[3 4]]
'''
# 1.2 元组
arr2 = np.array(((1,2),(3,4)))
print(arr2)
'''
[[1 2]
[3 4]]
'''
b. 特殊数组
# 1.3 特殊数组(0,1数组)
arr3 = np.ones((2,1)) # 可以使用[2,1]或(1,2),通常使用(1,2)
print(arr3)
arr4 = np.zeros((2,1))
print(arr4)
'''
[[ 1.]
[ 1.]]
[[ 0.]
[ 0.]]
'''
c. 产生等差/等比数列的数组
# 1.4 产生等差数组
arr5 = np.arange(0,5,1) # 起始,终止(不含),步长
print(arr5)
arr6 = np.linspace(0,5,5) # 起始,终止,个数
print(arr6)
# 创建等比数列,比例为10,起始值10^1(10),终止值为10^2(100),有2个数的等比数列
arr3 = np.logspace(1,2,2,base=10)
print(arr3)
s = 'abcd'
arr4 = np.fromstring(s,dtype=np.int8)
print(arr4)
'''
[0 1 2 3 4]
[ 0. 1.25 2.5 3.75 5. ]
[ 10. 100.]
[ 97 98 99 100]
'''
d. 产生随机数数组
# 1.5 随机数
arr7 = np.random.random((3,2))
print(arr7)
'''
[[ 0.76359424 0.12621422]
[ 0.11343905 0.28138512]
[ 0.36330518 0.6561023 ]]
'''
e. 改变数组的形式(特别,当reshape(1,n)时,即实现多维数组的展开)
# 1.6 改变数组的形状
arr8 = np.arange(0,6).reshape(2,3)
print(arr8)
'''
[[0 1 2]
[3 4 5]]
'''
4. 基本操作
a. 算术运算(加、减、乘、除、矩阵积)
# 2.1 算术运算
arr1 = np.arange(0,4).reshape(2,2)
print(arr1)
arr1_mul = arr1*2 # 数组点积
print(arr1_mul) # [[ 2 3]
arr2 = np.arange(0,4).reshape(2,2)
arr1_mul = arr1.dot(arr2) # 矩阵乘积
print(arr1_mul)
'''
原数组:
[[0 1]
[2 3]]
数组中每个元素乘以2
[[0 2]
[4 6]]
数组与数组之间的乘积,遵循矩阵的乘法(一行乘以一列)
[[ 2 3]
[ 6 11]]
'''
# 2.2 自增和自减
arr3 = np.arange(0,4)
arr3+=1
print(arr3) # [1 2 3 4]
arr3-=1
print(arr3) # [0 1 2 3]
说明:在Python中没有++或--运算符,代替的是:+=1,-=1
b. 常用数学函数
# 向下取整
arr1 = np.random.random((1,3))-0.5
print(arr1)
arr1_floor = np.floor(arr1)
print(arr1_floor)
arr1_around = np.round(arr1,3) # 保留3位小数
print(arr1_around)
'''
# 向下取整
[[ 0.14463441 -0.09867913 0.47058381]]
[[ 0. -1. 0.]]
[[ 0.015 0.182 -0.412]]
'''
常用函数参考:https://www.cnblogs.com/TensorSense/p/6795995.html
5. 数据索引(抽取数组中的一部分元素生成新的数组)
# 1.一维数组索引
a = np.arange(10)
print(a)#[0 1 2 3 4 5 6 7 8 9]
print(a[3:6])#3,4,5不包含6的值
print(a[:3])#不写从0开始
print(a[1:8:2])#1-8,步长为2
print(a[::-1])#-1表示反转数组
b = np.random.rand(10)
print(b[b>0.5])#b中元素值大于0.5的值
# 2. 二维数组索引
arr1 = np.arange(0,9).reshape((3,3))
print(arr1)
arr1_query = arr1[0:2,1:] # 分别切行和列
print(arr1_query)
'''
[[0 1 2]
[3 4 5]
[6 7 8]]
[[1 2]
[4 5]]
'''
参考:
1.《Python数据分析实战》