一.特殊函数创建数组
1.等差数列
import numpy as np
arr1=np.linspace(2,10,5)
print(arr1)
"""
np.linspace(start=a1, stop=an, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数说明:
endpoint=True: 表示等差数列, 在start与stop之间插入 n-2 个值;(n为数值的个数)
endpoint=False: 表示等差数列, 在start与stop之间插入 n-1个值,表示平均分成n份;(为线段的个数)
"""
2.等比数列
arr2=np.logspace(1,5,3,base=2)
print(arr2)
3.arange–>类似于range
arr3=np.arange(1,10,1)
print(arr3)
4全一数组
arr4=np.ones((2,4))
print(arr4)
'''
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
'''
5全零数组
arr5=np.zeros((3,5))
print(arr5)
'''
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
'''
6单位数组
arr6=np.eye(3)
print(arr6)
'''
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
'''
7对角数组
arr7=np.diag([1,2,3,4])
print(arr7)
'''
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]
'''
8创建随机数组
(1)创建n个0-1之间的随机数(一维的)
arr8=np.random.random(10)
print(arr8)
(2)创建服从均匀分布的随机数(0-1)
arr9=np.random.rand(100000)
print(arr9)
import matplotlib.pyplot as plt
plt.figure()
plt.hist(arr9,10)
plt.show()
(3)创建服从正态分布的随机数
arr10=np.random.randn(10000)
print(arr10)
plt.figure()
plt.hist(arr10,9)
plt.show()
(4)随机整数生成 low <= x < high
arr11=np.random.randint(2,4,size=[2,5])
print(arr11)
'''
[[3 3 3 3 2]
[2 3 2 2 3]]
'''
二.矩阵形态变换
1.重置数组结构
arr_1=np.arange(10)
print(arr_1)
arr_2=arr_1.reshape((2,5))
print(arr_2)
arr_3=arr_2.ravel()
print(arr_3)
arr_4=arr_2.flatten('C')
print(arr_4)
arr_5=arr_2.flatten('F')
print(arr_2)
'''
[0 1 2 3 4 5 6 7 8 9]
[[0 1 2 3 4]
[5 6 7 8 9]]
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[0 5 1 6 2 7 3 8 4 9]
'''
2.堆叠方法
arr_6=np.zeros((3,4))
arr_7=np.ones((3,5))
arr_8=np.zeros((4,3))
arr_9=np.ones((2,3))
arra=np.ones(3)
arrb=np.zeros(3)
arr_10=np.hstack((arr_6,arr_7))
print(arr_10)
arr_11=np.vstack((arr_8,arr_9))
arrc=np.vstack((arra,arrb))
print(arr_11)
print(arrc)
'''
[[ 0. 0. 0. 0. 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 1. 1. 1. 1. 1.]
[ 0. 0. 0. 0. 1. 1. 1. 1. 1.]]
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 1. 1. 1.]
[ 0. 0. 0.]]
'''
3.数组合并
arr_12=np.concatenate((arr_8,arr_9),axis=0)
arrd=np.concatenate((arra,arrb),axis=0)
print(arr_12)
print(arrd)
'''
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[ 1. 1. 1. 0. 0. 0.]
concatenate与hstack/vstack的区别: concatenate是严格严格沿着数组的方向拼接的,一位数组只有一个axis轴,因此只有一种拼接方式. hstack/vstack不关注有几个轴,只是单纯的按照横向/纵向堆叠即可,因此一位数组也有两种堆叠方式
'''
4.数组分割
arr_12=np.hsplit(arr_10,3)
arr_13=np.hsplit(arr_10,[2,4,6])
print(arr_12)
print(arr_13)
arr_14=np.vsplit(arr_10,3)
print(arr_14)
arr_15=np.split(arr_10,3,axis=0)
arr_16=np.split(arr_10,3,axis=1)
print(arr_15)
print(arr_16)
'''
[array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]),
array([[ 0., 1., 1.],
[ 0., 1., 1.],
[ 0., 1., 1.]]),
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])]
[array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]]),
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]]),
array([[ 1., 1.],
[ 1., 1.],
[ 1., 1.]]),
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])]
[array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]]), array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]]), array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]])]
[array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]]), array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]]), array([[ 0., 0., 0., 0., 1., 1., 1., 1., 1.]])]
[array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]),
array([[ 0., 1., 1.],
[ 0., 1., 1.],
[ 0., 1., 1.]]),
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])]
'''
三.数组运算
1.四则运算
ar_1=np.arange(1,17).reshape((4,4))
print(ar_1)
ar_2=np.diag([2,3,1,5])
print(ar_2)
ar_3=ar_1*ar_2
print(ar_3)
ar_4=ar_1+ar_2
print(ar_4)
ar_5=ar_1-ar_2
print(ar_5)
ar_6=ar_4/ar_1
print(ar_6)
ar_7=ar_4//ar_1
print(ar_7)
ar_8=ar_4%ar_1
print(ar_8)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[[2 0 0 0]
[0 3 0 0]
[0 0 1 0]
[0 0 0 5]]
[[ 2 0 0 0]
[ 0 18 0 0]
[ 0 0 11 0]
[ 0 0 0 80]]
[[ 3 2 3 4]
[ 5 9 7 8]
[ 9 10 12 12]
[13 14 15 21]]
[[-1 2 3 4]
[ 5 3 7 8]
[ 9 10 10 12]
[13 14 15 11]]
[[ 3. 1. 1. 1. ]
[ 1. 1.5 1. 1. ]
[ 1. 1. 1.09090909 1. ]
[ 1. 1. 1. 1.3125 ]]
[[3 1 1 1]
[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[0 0 0 0]
[0 3 0 0]
[0 0 1 0]
[0 0 0 5]]
'''
2.比较运算
ar_9=ar_1>=ar_2
print(ar_9)
mask=ar_1>8
print(mask)
print(ar_1[mask])
'''
[[False True True True]
[ True True True True]
[ True True True True]
[ True True True True]]
[[False False False False]
[False False False False]
[ True True True True]
[ True True True True]]
[ 9 10 11 12 13 14 15 16]
'''
3.逻辑运算
ar_10=np.all(mask)
print(ar_10)
ar_11=np.any(mask)
print(ar_11)
4.广播运算
ar_12=np.arange(1,17).reshape([4,4])
ar_13=np.array([1,0,1,0])
ar_14=np.array([[1],[0],[1],[0]])
print(ar_12)
print(ar_12+ar_13)
print(ar_12+ar_14)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
[[ 2 2 4 4]
[ 6 6 8 8]
[10 10 12 12]
[14 14 16 16]]
[[ 2 3 4 5]
[ 5 6 7 8]
[10 11 12 13]
[13 14 15 16]]
'''
5.标题特殊方法
ar_15=np.array([21,10,20,8,15,1])
ar_15.sort()
print(ar_15)
ar_16=ar_15.argsort()
print(ar_16)
ar_17=np.array([[12,2,10,9],[2,90,25,1]])
print(ar_17)
ar_17.sort(axis=0)
print(ar_17)
print(ar_17.argsort())
'''
[ 1 8 10 15 20 21]
[0 1 2 3 4 5]
[[12 2 10 9]
[ 2 90 25 1]]
[[ 2 2 10 1]
[12 90 25 9]]
[[3 0 1 2]
[3 0 2 1]]
'''
去重
arr=np.array([21,2,21,1,0,1])
arr1=np.unique(arr)
print(arr1)
arr2=np.array([[2,1,2,1],[2,0,2,0],[1,1,2,1],[2,0,2,0],])
print(np.unique(arr2))
print(np.unique(arr2,axis=1))
print(np.unique(arr2,axis=0))
''''''
[ 0 1 2 21]
[0 1 2]
[[1 2 2]
[0 2 2]
[1 1 2]
[0 2 2]]
[[1 1 2 1]
[2 0 2 0]
[2 1 2 1]]