python进阶学习---numpy的使用

numpy简介

Numpy是一个python包,他代表“Numeric Python ”。他是一个由多维数组对象和用于处理数组的例程集合组成的库。

使用Numpy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算
  • 傅里叶变换和用于图形操作的例程
  • 与线性代数有关的操作。Numpy拥有线性代数和随机数生成的内置函数

numpy属性

import numpy as np

通过numpy可以创建指定的矩阵,并且可以查看该矩阵的维度、形状、大小、元素类型等

import numpy as np
array=np.array([[1,2,3],
               [4,5,6],
               [7,8,9]])
print(array)
'''
[[1 2 3]
 [4 5 6]
 [7 8 9]]
'''
#查看矩阵的维度  ---->看括号的数量[]
print(array.ndim)   #2
#矩阵的形状
print(array.shape)  #(3, 3)
#矩阵的大小
print(array.size)   #9
#矩阵中元素的类型
print(array.dtype)  #int32

创建array

创建一维数据并指定元素的数据类型

import numpy as np
#指定元素数据类型
a=np.array([1,2,3],dtype=np.int32)
print(a.dtype)  #int32
print(a)    #[1 2 3]
b=np.array([1,2,3],dtype=np.float)
print(b.dtype)  #float64
print(b)    #[1. 2. 3.]

创建二维数据

d=np.array([[1,2,3],
           [4,5,6]])
print(d)
'''
[[1 2 3]
 [4 5 6]]
'''

生成指定特殊矩阵

#生成2行3列全为0的矩阵
zero=np.zeros((2,3))
print(zero)
'''
[[0. 0. 0.]
 [0. 0. 0.]]
'''
#生成3行4列全为1的矩阵
one=np.ones((3,4))
print(one)
'''
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
'''
#生成3行2列全都接近于0但不等于0的矩阵
empty=np.empty((3,2))
print(empty)
'''
[[0. 0.]
 [0. 0.]
 [0. 0.]]
'''

生成指定范围的一维数组

#生成指定范围的一维数组
e=np.arange(10)
print(e)    #[0 1 2 3 4 5 6 7 8 9]

f=np.arange(4,12)
print(f)    #[ 4  5  6  7  8  9 10 11]

g=np.arange(1,20,3)
print(g)    #[ 1  4  7 10 13 16 19]

将生成的一维数据转换为指定行列数的矩阵--->重新定义矩阵的形状

h=np.arange(8).reshape(2,4)
print(h)
'''
[[0 1 2 3]
 [4 5 6 7]]
'''

numpy的运算

加减乘(对应位相乘)除

import numpy as np
arr1=np.array([[1,2,3],
              [4,5,6]])
arr2=np.array([[1,1,2],
               [2,3,3]])
#矩阵的加法
print(arr1+arr2)
'''
[[2 3 5]
 [6 8 9]]
'''
#矩阵的减法
print(arr1-arr2)
'''
[[0 1 1]
 [2 2 3]]
'''
#矩阵的乘法--->对应位相乘
print(arr1*arr2)
'''
[[ 1  2  6]
 [ 8 15 18]]
'''
#矩阵的除法
print(arr1/arr2)
'''
[[1.         2.         1.5       ]
 [2.         1.66666667 2.        ]]
'''

幂、取余、取整、元素同加

import numpy as np
arr1=np.array([[1,2,3],
              [4,5,6]])
arr2=np.array([[1,1,2],
               [2,3,3]])
#求幂操作
print(arr1**arr2)
'''
[[  1   2   9]
 [ 16 125 216]]
'''
#矩阵的取余
print(arr1%arr2)
'''
[[0 0 1]
 [0 2 0]]
'''
#矩阵的取整
print(arr1//arr2)
'''
[[1 2 1]
 [2 1 2]]
'''
#所有元素加同一个数--->乘、减、除类似
print(arr1+2)
'''
[[3 4 5]
 [6 7 8]]
'''

判断、矩阵乘、转置

import numpy as np
arr1=np.array([[1,2,3],
              [4,5,6]])
arr2=np.array([[1,1,2],
               [2,3,3]])
#矩阵的判断
arr3=arr1>3
print(arr3)
'''
[[False False False]
 [ True  True  True]]
'''
#矩阵乘法规则的乘法
#方式一
arr=np.dot(arr1,arr4)
print(arr)
'''
[[ 6.  6.  6.  6.  6.]
 [15. 15. 15. 15. 15.]]
'''
#方式二
arr1.dot(arr4)
#转置矩阵
print(arr1.T)
'''
[[1 4]
 [2 5]
 [3 6]]
'''
print(np.transpose(arr1))
'''
[[1 4]
 [2 5]
 [3 6]]
'''

随机数生成以及矩阵的运算

随机数生成

import numpy as np
sample1=np.random.random((3,2))    #生成3行2列从0到1的随机数
print(sample1)
'''
[[0.17574158 0.94161903]
 [0.31902432 0.11888639]
 [0.93937211 0.57857994]]
'''
sample2=np.random.normal(size=(3,2))    #生成3行2列符合标准正态分布的随机数
print(sample2)
'''
[[ 1.25383118 -0.97649298]
 [ 0.97212156 -0.93796601]
 [-1.39450905 -0.44917851]]
'''
sample3=np.random.randint(0,10,size=(3,2))  #生成3行2列从0到10的随机整数
print(sample3)
'''
[[2 7]
 [0 3]
 [0 2]]
'''

矩阵的运算

#求和
print(np.sum(sample1))      #3.073223370929319
#求最小值
print(np.min(sample1))      #0.11888638852057853
#求最大值
print(np.max(sample1))      #0.941619034678746
#对列求和
print(np.sum(sample1,axis=0))       #[1.434138   1.63908537]
#对行求和
print(np.sum(sample1,axis=1))       #[1.11736062 0.4379107  1.51795205]

#所有元素中最小值的索引
print(np.argmin(sample1))       #3
#所有元素中最大值的索引
print(np.argmax(sample1))       #1
#求平均值
print(np.mean(sample1))     #0.5122038951548865
print(sample1.mean())       #0.5122038951548865
#求中位数
print(np.median(sample1))   #0.4488021304789098
#求开方的结果
print(np.sqrt(sample1))
'''
[[0.41921543 0.97037057]
 [0.56482238 0.34479906]
 [0.96921211 0.76064443]]
'''
sample4=np.random.randint(0,10,size=(1,10))
print(sample4)      #[[9 8 1 6 1 1 1 1 8 5]]
#排序
print(np.sort(sample4))     #[[1 1 1 1 1 5 6 8 8 9]]
print(np.sort(sample1)) #对每一行进行排序
'''
[[0.17574158 0.94161903]
 [0.11888639 0.31902432]
 [0.57857994 0.93937211]]
'''
#按条件改变元素值(小于2的变为2,大于7的变成7)
print(np.clip(sample4,2,7))     #[[7 7 2 6 2 2 2 2 7 5]]

numpy的索引

import numpy as np
arr1=np.arange(2,14)
print(arr1) #[ 2  3  4  5  6  7  8  9 10 11 12 13]
#索引从0开始
print(arr1[2])  #4
#前包后不包
print(arr1[1:4])    #[3 4 5]

print(arr1[2:-1])   #[ 4  5  6  7  8  9 10 11 12]
#前5个数据
print(arr1[:5]) #[2 3 4 5 6]
#取最后两个数据
print(arr1[-2:])    #[12 13]
#改变形式
arr2=arr1.reshape(3,4)
print(arr2)
'''
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
'''
#取第一行数据(0行开始)
print(arr2[1])  #[6 7 8 9]
#第一行第一列(形式1)
print(arr2[1][1])   #7
#第一行第二列(形式2)
print(arr2[1,2])    #8
#所有行的第二列
print(arr2[:,2])    #[ 4  8 12]
#for循环中迭代的是行
for i in arr2:
    print(i)
'''
[2 3 4 5]
[6 7 8 9]
[10 11 12 13]
'''
#使用转置迭代列
for i in arr2.T:
    print(i)
'''
[ 2  6 10]
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
'''
#迭代每一个元素
for i in arr2.flat:
    print(i)
'''
2
3
4
5
6
7
8
9
10
11
12
13
'''

array合并

import numpy as np
arr1=np.array([1,2,3])
arr2=np.array([4,5,6])
#垂直合并
arr3=np.vstack((arr1,arr2))
print(arr3) #[[1 2 3],[4 5 6]]
print(arr3.shape)   #(2, 3)
#水平合并
arr4=np.hstack((arr1,arr2))
print(arr4) #[1 2 3 4 5 6]
print(arr4.shape)   #6

arrv=np.vstack((arr1,arr2,arr3))
print(arrv) #[[1 2 3],[4 5 6],[1 2 3],[4 5 6]]

arrh=np.hstack((arr1,arr2,arr4))
print(arrh) #[1 2 3 4 5 6 1 2 3 4 5 6]

arr=np.concatenate((arr1,arr2,arr1))
print(arr)      #[1 2 3 4 5 6 1 2 3]
#axis=0表示纵向合并  合并的array维度要相同,array形状要匹配
arr=np.concatenate((arr3,arrv),axis=0)
print(arr)      #[[1 2 3],[4 5 6],[1 2 3],[4 5 6],[1 2 3],[4 5 6]]
#axis=1表示横向合并  合并的array维度要相同,array形状要匹配
arr=np.concatenate((arr3,arr3),axis=1)
print(arr)      #[[1 2 3 1 2 3],[4 5 6 4 5 6]]

#一维的array不能转置
print(arr1.T)   #[1 2 3]
print(arr1.shape)       #(3,)

arr1_1=arr1[np.newaxis,:]
print(arr1_1)   #[[1 2 3]]
print(arr1_1.shape) #(1, 3)
print(arr1_1.T) #[[1],[2],[3]]

arr1_2=arr1[:,np.newaxis]
print(arr1_2)   #[[1],[2],[3]]
print(arr1_2.shape) #(3, 1)
#变成2维数据
arr1_3=np.atleast_2d(arr1)
print(arr1_3)   #[[1 2 3]]
print(arr1_3.T) #[[1],[2],[3]]

array分割

import numpy as np
arr1=np.arange(12).reshape((3,4))
print(arr1) #[[ 0  1  2  3],[ 4  5  6  7],[ 8  9 10 11]]

#水平方向分为2部分
arr2,arr3=np.split(arr1,2,axis=1)
print(arr2)     #[[0 1],[4 5],[8 9]]
print(arr3)     #[[ 2  3],[ 6  7],[10 11]]
#垂直方向分为3份
arr4,arr5,arr6=np.split(arr1,3,axis=0)
print(arr4)     #[[0 1 2 3]]
print(arr5)     #[[4 5 6 7]]
print(arr6)     #[[ 8  9 10 11]]
#水平方向分为3份--->不等分割
arr7,arr8,arr9=np.array_split(arr1,3,axis=1)
print(arr7)     #[[0 1],[4 5],[8 9]]
print(arr8)     #[[ 2],[ 6],[10]]
print(arr9)     #[[ 3],[ 7],[11]]
#垂直分割
arrv1,arrv2,arrv3=np.vsplit(arr1,3)
print(arrv1)        #[[0 1 2 3]]
print(arrv2)        #[[4 5 6 7]]
print(arrv3)        #[[ 8  9 10 11]]
#水平分割
arrh1,arrh2=np.hsplit(arr1,2)
print(arrh1)        #[[0 1],[4 5],[8 9]]
print(arrh2)        #[[ 2  3],[ 6  7],[10 11]]

 numpy的浅拷贝和深拷贝

import numpy as np
arr1=np.array([1,2,3])
arr2=arr1       #arr1和arr2共享同一块内存,浅拷贝
arr2[0]=5
print(arr1)     #[5 2 3]
print(arr2)     #[5 2 3]
#深拷贝
arr3=arr1.copy()
arr3[0]=10
print(arr1)     #[5 2 3]
print(arr3)     #[10  2  3]

 

posted @ 2019-09-27 11:20  凝宝爱火锅  阅读(276)  评论(0编辑  收藏  举报