在我们学习数学建模和机器学习过程中难免要用到数据处理,而python的matplotlib+numpy+pandas是我们必须要学习的库,此文章介绍了numpy库的各种基本函数及用法,并帮大家区分了矩阵运算分割合并函数中何时axis=0,axis=1。
2.numpy属性
import numpy as np
array=np.array([ #( )
[1,2,3], #,
[4,5,6], #,
[7,8,9]
])
print(array)
print('------------------')
print('shape',array.shape) #几行几列
print('------------------')
print('size',array.size) #几个元素
print('------------------')
print('dimination',array.ndim)#几维
输出
[[1 2 3]
[4 5 6]
[7 8 9]]
------------------
shape (3, 3)
------------------
size 9
------------------
dimination 2
3.创建array
import numpy as np
a=np.array([1,2,3],dtype=np.int) #float
print(a.dtype) #a.dtype
print('------------------')
b=np.zeros((2,2)) # 0 0
print(b) # 0 0
print('------------------')
c=np.ones((2,2)) # 1 1
print(c) # 1 1
print('------------------')
d=np.arange(1,10,2) #2 步长 1-9数字
print(d)
print('------------------')
e=np.arange(10) #0-9
print(e)
print('------------------')
e=np.arange(10).reshape(2,5) #reshape 2 行 5 列
print(e)
print('------------------')
f=np.linspace(1,10,6).reshape(2,3) #5 分成5段 2 行 3 列
print(f)
输出
int32
------------------
[[0. 0.]
[0. 0.]]
------------------
[[1. 1.]
[1. 1.]]
------------------
[1 3 5 7 9]
------------------
[0 1 2 3 4 5 6 7 8 9]
------------------
[[0 1 2 3 4]
[5 6 7 8 9]]
------------------
[[ 1. 2.8 4.6]
[ 6.4 8.2 10. ]]
4.numpy运算
import numpy as np
a=np.array([1,2,3])
b=np.arange(4,7)
print(a<2)
print('------------------')
c=a+b
print(c)
print('------------------')
array1=np.array([ # ( )
[1,2,3], #,
[4,5,6], #,
[7,8,9]
])
array2=np.array([ # ( )
[3,2,4], #,
[6,3,6], #,
[1,1,9]
])
d=array1*array2 #矩阵对应数字相乘
e=np.dot(array1,array2) #矩阵乘法运算=array1.dot(array2)
print(d)
print('------------------')
print(e)
print('------------------')
arr=np.random.random((3,3))
print(arr)
print('------------------')
print(np.sum(arr))
print('------------------')
print(np.sum(arr,axis=0))#矩阵元素求和 axis=0 列求和 axis=1 行求和
print('------------------')
print(np.min(arr))
print('------------------')
print(np.max(arr))
输出
[ True False False] ------------------ [5 7 9] ------------------ [[ 3 4 12] [24 15 36] [ 7 8 81]] ------------------ [[ 18 11 43] [ 48 29 100] [ 78 47 157]] ------------------ [[0.36238839 0.26379906 0.51847205] [0.14332761 0.93624511 0.97194773] [0.27334051 0.25652996 0.71679545]] ------------------ 4.442845873602402 ------------------ [0.77905651 1.45657414 2.20721523] ------------------ 0.14332761426743845 ------------------ 0.9719477294646877
import numpy as np
a=np.arange(1,7).reshape(2,3)
print(a)
print('------------------')
print(np.argmin(a))#矩阵中最小值的索引 第0号
print('------------------')
print(np.argmax(a))#矩阵中最大值的索引 第5号
print('------------------')
print(np.average(a))#平均值
print('------------------')
print(np.average(a,axis=1))#行平均值
print('------------------')
print(np.median(a))#中位数
print('------------------')
print(np.cumsum(a))#+cumulate sum
print('------------------')
print(np.diff(a)) #-
print('------------------')
print(np.sort(a))#每一行从小到大排序
print('------------------')
print(np.transpose(a))#print(a.T)转置矩阵
print('------------------')
print((a.T).dot(a))
print('------------------')
print(np.clip(a,2,5)) #小于2的数变为2,大于5的数变为5
print('------------------')
e=np.concatenate((a,a,a),axis=1)#axis=1行合并
print(e)
print('------------------')
e=np.concatenate((a,a,a),axis=0)#axis=0列合并
print(e)
输出
[[1 2 3]
[4 5 6]]
------------------
0
------------------
5
------------------
3.5
------------------
[2. 5.]
------------------
3.5
------------------
[ 1 3 6 10 15 21]
------------------
[[1 1]
[1 1]]
------------------
[[1 2 3]
[4 5 6]]
------------------
[[1 4]
[2 5]
[3 6]]
------------------
[[17 22 27]
[22 29 36]
[27 36 45]]
------------------
[[2 2 3]
[4 5 5]]
------------------
[[1 2 3 1 2 3 1 2 3]
[4 5 6 4 5 6 4 5 6]]
------------------
[[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]
[1 2 3]
[4 5 6]]
5.numpy索引
import numpy as np
a=np.arange(1,7).reshape(2,3)
print(a)
print('------------------')
print(a[1][1])#print(a[1,1])
print('------------------')
print(a[1][1:])#1-3 1:3
print('------------------')
for row in a:#每一行迭代
print(row)
print('------------------')
for row in a.T:#每一列迭代
print(row)
print('------------------')
print(a.flatten()) #变为一维
print('------------------')
for item in a.flat:#逐个输出
print(item)
输出
[[1 2 3]
[4 5 6]]
------------------
5
------------------
[5 6]
------------------
[1 2 3]
[4 5 6]
------------------
[1 4]
[2 5]
[3 6]
------------------
[1 2 3 4 5 6]
------------------
1
2
3
4
5
6
6.array合并
import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
c=np.vstack((a,b,a)) #vertical stack
print(c)
print('------------------')
d=np.hstack((a,b)) #horizonal stack
print(d)
print('------------------')
print(a.T)#一维数组无法转置
e=np.concatenate((a,b,a,a),axis=0)# axis=1行合并 axis=0列合并
print(e)
print('------------------')
a=np.array([1,2,3])[np.newaxis,:]#增加行维度变成矩阵 /[:,np.newaxis]
print(a.T)#reshape也行。。
输出
[[1 2 3]
[4 5 6]
[1 2 3]]
------------------
[1 2 3 4 5 6]
------------------
[1 2 3]
[1 2 3 4 5 6 1 2 3 1 2 3]
------------------
[[1]
[2]
[3]]
7.array分割
import numpy as np
a=np.arange(1,13).reshape(3,4)
print(a)
print('-------------------------------------------------------------------------------')
print(np.vsplit(a,3))#vsplit 对列进行切割 列是竖着的 要用刀切也是横着切,所以有了1234这一行
print('-------------------------------------------------------------------------------')
print(np.split(a,3,axis=0))#axis=0,对列进行分割 列是竖着的 要用刀切也是横着切
print('-------------------------------------------------------------------------------')
print(np.array_split(a,3,axis=0))#axis=0,对列进行分割 不均等分割
print('-------------------------------------------------------------------------------')
print(np.hsplit(a,4))#vsplit 对行进行切割 行是横着的 要用刀切也是竖着切
print('-------------------------------------------------------------------------------')
print(np.split(a,4,axis=1))#axis=1,对行进行分割 行是横着的 要用刀切也是竖着切
print('-------------------------------------------------------------------------------')
print(np.array_split(a,3,axis=1))#axis=1,对行进行分割 不均等分割
输出
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
-------------------------------------------------------------------------------
[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]
-------------------------------------------------------------------------------
[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]
-------------------------------------------------------------------------------
[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12]])]
-------------------------------------------------------------------------------
[array([[1],
[5],
[9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]]), array([[ 4],
[ 8],
[12]])]
-------------------------------------------------------------------------------
[array([[1],
[5],
[9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]]), array([[ 4],
[ 8],
[12]])]
-------------------------------------------------------------------------------
[array([[ 1, 2],
[ 5, 6],
[ 9, 10]]), array([[ 3],
[ 7],
[11]]), array([[ 4],
[ 8],
[12]])]
8.拷贝与复值
import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
a=b#地址与值都相同
print(a,b)
b=a.copy()#只把值复制过来,地址并不相同
输出
[4 5 6] [4 5 6]



