numpy基础知识快速入门

numpy学习 基础知识快速入门


前言

个人numpy记录,随便写的,如有误请指教
课件截图来源:https://www.bilibili.com/video/BV14K4y1v7xP?p=1


一、基础

1.创建数组

在这里插入图片描述

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

!获取矩阵行数

ndarray.shape 返回元组,元组[0] 为行数,元组[1]为列数

2.数据类型

在这里插入图片描述
在这里插入图片描述

改变数组数据类型

import numpy
a=numpy.array([1,2,3],dtype=numpy.int64)
print(a,a.dtype)

或者使用类型代码

import numpy
a=numpy.array([1,2,3],dtype='i8')
print(a,a.dtype)

3.arange()数值范围数组

在这里插入图片描述

4.linspace()等差数组

在这里插入图片描述

4.logspace()等比数组

在这里插入图片描述

import numpy
a=numpy.arange(10)
print(a)

>>>[0 1 2 3 4 5 6 7 8 9]

import numpy
a=numpy.arange(1,10,2)
print(a)

>>>[1 3 5 7 9]
#改变数组数据类型
>import numpy
a=numpy.arange(1,10,2,dtype=numpy.float64)
print(a)
>>>[1. 3. 5. 7. 9.]

>import numpy
#不包括结束值
a=numpy.linspace(1,10,10,endpoint=False)
print(a)

5.二维数组

import numpy
a=numpy.array([[1,2,3],
               [4,5,6],
               [7,8,9]])
print(a)
>>>[[1 2 3]
 [4 5 6]
 [7 8 9]]

6.数组的轴

在这里插入图片描述

7.数组转置

import numpy
a=numpy.array([[1,2,3],
               [4,5,6],
               [7,8,9]])
b=a.T
print(b)
>>>[[1 4 7]
	 [2 5 8]
	 [3 6 9]]

8.其他二维数组

(1)ones() 全为1数组

在这里插入图片描述

import numpy as np
a=np.ones([2,3])
print(a)
>>> %Run jiaoben.py
[[1. 1. 1.]
 [1. 1. 1.]]
 
a=np.ones([2,3],dtype=np.int32)
print(a)
>>>[[1 1 1]
 [1 1 1]]

(2)zeros() 全为0数组

在这里插入图片描述

import numpy as np
a=np.zeros([3,4],dtype=np.int32)
print(a)
>>> %Run jiaoben.py
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

(3)full()

在这里插入图片描述

import numpy as np
a=np.full([3,4],10.)
print(a)
>>> %Run jiaoben.py
[[10. 10. 10. 10.]
 [10. 10. 10. 10.]
 [10. 10. 10. 10.]]

(4)identity() 单位矩阵

在这里插入图片描述

import numpy as np
a=np.identity(4,dtype=np.int32)
print(a)

>>> %Run jiaoben.py
[[1 0 0 0]
 [0 1 0 0]
 [0 0 1 0]
 [0 0 0 1]]

9.索引访问

在这里插入图片描述
在这里插入图片描述

10.数组切片访问(一维、二维)

切片访问为浅层复制,修改被切片后数组的数据,原来数组相应位置的数据也会发生改变

在这里插入图片描述

import numpy as np
a=np.array([1,3,5,7,9])
print(a[1:3])
print(a[:3])
print(a[1:])
print(a[:])
print(a[1:-1])
print(a[1::2])
>>> %Run jiaoben.py
[3 5]
[1 3 5]
[3 5 7 9]
[1 3 5 7 9]
[3 5 7]
[3 7]

在这里插入图片描述
!二维数组切片切出的还是二维数组

import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
print(a[0:2,1:2],'\n',a[1:2,1:2].shape)

>>> %Run jiaoben.py
[[2]
 [5]] 
 (1, 1)
import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
#前面为行切片,后面为指定列,切出来为一维数组
print(a[1:,1],a[1:,1].shape)

>>> %Run jiaoben.py
[5 8] (2,)

11.bool索引

深层复制:不共用相同数据空间

在这里插入图片描述

#一维数组bool索引
import numpy as np
a=np.array([1,2,3,4])
#对应数据位置,True提取,False舍弃,维度大小与原数组相同
b=np.array([True,False,True,False])
print(a[b])

>>> %Run jiaoben.py
[1 3]
#二维数组bool索引
import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
b=np.array([[True,False,True],
           [True,False,True],
           [True,False,True]])
print(a[b],a[b].shape)

>>> %Run jiaoben.py
[1 3 4 6 7 9] (6,)

12.花式索引

在这里插入图片描述

#一维数组花式索引
import numpy as np
a=np.array([1,2,3,4,5,6,7,8])

b=[1,2,3,4] #将列表作为索引
print(a[b],a[b].shape)

c=np.array([1,2,3,4]) #将数组作为索引
print(a[c],a[c].shape)

d=np.array([[1,2],
           [3,4]] )#将二维数组作为索引,返回相应二维数组
print(a[d],a[d].shape)

>>> %Run jiaoben.py
[2 3 4 5] (4,)
[2 3 4 5] (4,)
[[2 3]
 [4 5]] (2, 2)
#二维数组花式索引
import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
m=[1,2] #表示提取的行
n=[0,1] #表示提取的列
#行与列中数据对应组成在二维数组中坐标
b=a[m,n]
print(b)

>>> %Run jiaoben.py
[4 8]


#整数与列表混用的花式索引
import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
m=[1,2] #表示提取的行
#行中数据与整数对应组成在二维数组中坐标
b=a[m,2]
print(b)
>>> %Run jiaoben.py
[6 9]

#二维数组与整数混用的花式索引:返回二维数组形式
import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
m=np.array([[1,1],
            [2,0]])#表示提取的行

#数组中每个数据与整数对应组成在二维数组中坐标
b=a[m,2]
print(b)

>>> %Run jiaoben.py
[[6 6]
 [9 3]]

若不用a[m,n]的形式进行访问,而是用a[m][n]的形式:先把a[m]作为一个二维数组,由a中的m列表中数字所对应的的行组成,然后把a[m]作为一个整体,被[n]进行索引

import numpy as np
a=np.array([[1,2,3],
           [4,5,6],
           [7,8,9]])
m=[1,2] #表示提取的行
n=[0,1] #表示提取的列
#行与列中数据对应组成在二维数组中坐标
b=a[m][n]
print(b)

>>> %Run jiaoben.py
[[4 5 6]
 [7 8 9]]

13.连接数组

(1)concatenate( )

在这里插入图片描述

(2)vstack( ) 垂直堆叠

在这里插入图片描述

(3)水平堆叠

在这里插入图片描述

import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
ab1=np.concatenate((a,b),0) #沿0轴堆叠
ab11=np.concatenate((a,b),1) #沿1轴堆叠
ab2=np.vstack((a,b)) #垂直堆叠
ab3=np.hstack((a,b)) #水平堆叠

print(ab1,'\n')
print(ab11,'\n')
print(ab2,'\n')
print(ab3)

>>> %Run jiaoben.py
[[1 2]
 [3 4]
 [5 6]
 [7 8]] 

[[1 2 5 6]
 [3 4 7 8]] 

[[1 2]
 [3 4]
 [5 6]
 [7 8]] 

[[1 2 5 6]
 [3 4 7 8]]

14.分割数组

(1)split()

在这里插入图片描述

对一维数组:

import numpy as np
a=np.arange(9)
b=np.split(a,3) #三个数分割成一个数组
print(b)

>>> %Run jiaoben.py
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
import numpy as np
a=np.arange(9)
s=np.array([4,7])
#切片分割数组,s中索引在a切片后成为数组
#切片元素之前位置元素与之后位置元素分别组成两个数组
b=np.split(a,s) 
print(b)

>>> %Run jiaoben.py
[array([0, 1, 2, 3]), array([4, 5, 6]), array([7, 8])]

对二维数组:

#用整数分割
import numpy as np
a=np.array([[1,2,3,4],
           [5,6,7,8],
           [9,10,11,12],
           [13,14,15,16]])
#两份平均分割原来数组
b1=np.split(a,2)
print(b1)

>>> %Run jiaoben.py
[array([[1, 2, 3, 4],
       [5, 6, 7, 8]]), array([[ 9, 10, 11, 12],
       [13, 14, 15, 16]])]
#用一维数组分割(切片分割)
import numpy as np
a=np.array([[1,2,3,4],
           [5,6,7,8],
           [9,10,11,12],
           [13,14,15,16]])
s=[1,2]
#从索引1开始切,切到索引2(不包括)形成一个数组
#其余部分形成一个数组
b1=np.split(a,s)#默认沿0轴,若沿1轴可加axis=1
print(b1)

>>> %Run jiaoben.py
[array([[1, 2, 3, 4]]), array([[5, 6, 7, 8]]), array([[ 9, 10, 11, 12],
       [13, 14, 15, 16]])]

(2)vsplit()

在这里插入图片描述

(3)hsplit()

在这里插入图片描述

15.数组的运算

(1)算数运算

一维数组算数运算

import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
print(a+b) #对应相加
print(a**b) #对应次幂

>>> %Run jiaoben.py
[5 7 9]
[  1  32 729]

二维数组算数运算
在这里插入图片描述

(2)矩阵运算

×乘numpy.dot(a,b)
numpt.matumul(a,b)

import numpy as np
a=np.array([1,2,3])
b=np.array([4,5,6])
c=np.dot(a,b)

numpt.matumul(a,b)

import numpy as np
a=np.array([[1,2,3]])
b=np.array([[4],
            [5],
            [6]])
c=np.matmul(a,b)
print(c)

>>> %Run jiaoben.py
[[32]]

点乘:用*或者np.multiply()
若两个矩阵形状不同

import numpy as np
a=np.array([[1,2,3],
            [7,8,9]])
b=np.array([[2,2,2]])
c=np.multiply(a,b)

>>> c
array([[ 2,  4,  6],
       [14, 16, 18]])

16数组操作

在这里插入图片描述

(1)数组与标量

在这里插入图片描述

(2)数组与数组

在这里插入图片描述

17.数组广播

(1)数组与标量

在这里插入图片描述

(2)数组与数组

18.随机数函数

随机函数都属于numpy的random库,引用时前面要添加numpy.random.xx

(1)rand( ) 0~1随机数

在这里插入图片描述

import numpy as np
a=np.random.rand(10)
print(a)

>>> %Run jiaoben.py
[0.79301941 0.24856596 0.42063876 0.26755152 0.761463   0.63020947
 0.14541586 0.91615151 0.45667537 0.19847095]

(2) randint( ) 随机整数

在这里插入图片描述

import numpy as np
a=np.random.randint(3,7,10)
print(a)

>>> %Run jiaoben.py
[4 5 4 4 6 4 6 5 3 4]

(3)normal( ) 正态分布

在这里插入图片描述

import numpy as np
#三行四列的数组
a=np.random.normal(10,3,(3,4))
print(a)

>>> %Run jiaoben.py
[[11.36689722  9.25201028 13.53355723  6.794136  ]
 [12.11753634  7.85055826  4.5080742  10.65393614]
 [10.16257251  4.62960776  6.30161257  7.29882163]]

(4)randn( ) 标准正态分布

在这里插入图片描述

import numpy as np
a=np.random.randn(3,4)
print(a)
>>> %Run jiaoben.py
[[-0.28588147 -0.07143637 -0.30092237 -0.05523739]
 [ 0.51343968  0.31644223 -0.85997727 -1.91814207]
 [ 0.59695437 -0.37450489 -0.70278826  0.79764136]]

(5)choice( ) 按照权值产生随机数(轮盘赌算法)

numpy.random.choice(a, size=None, replace=True, p=None)

从a(只要是ndarray都可以,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组
replace:True表示可以取相同数字,False表示不可以取相同数字
数组p:与数组a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。(权重一维矩阵)

#轮盘赌算法抽取元素
import numpy as np
a=np.array([[1,2,3,4],
           [4,5,6,7],
           [7,8,9,10]])
size_0=a.shape[0] #获取矩阵的行数
weight=[0.1,0.2,0.7] #权重矩阵,个数要与矩阵行数相同
#参数1为数字矩阵,从中按权重抽取数字(此处为ndarray的下标)
#参数2为抽取出来元素的个数
#参数3表示是否能有重复抽取,true为可以
#参数4为权重矩阵
index=np.random.choice(np.arange(size_0),size=size_0,replace=True,p=weight)
new_a=a[index] #输出抽取的元素
print(new_a)

>>> %Run jiaoben.py
[[ 4  5  6  7]
 [ 4  5  6  7]
 [ 7  8  9 10]]

19.排序函数

(1)sort()

在这里插入图片描述

import numpy as np
a=np.random.randint(0,10,(3,4))
print(a)
#默认沿最后一个轴(二维为1轴)排序
b=np.sort(a)
print(b)

>>> %Run jiaoben.py
[[9 7 0 4]
 [9 9 1 9]
 [1 0 8 2]]
[[0 4 7 9]
 [1 9 9 9]
 [0 1 2 8]]

(2)argsort( )

在这里插入图片描述

import numpy as np
a=np.random.randint(0,10,(3,4))
print(a)
#原有数组排序后,以索引值代替数据值
b=np.argsort(a)
print(b)

>>> %Run jiaoben.py
[[6 3 3 7]
 [7 6 3 6]
 [0 9 4 7]]
[[1 2 0 3]
 [2 1 3 0]
 [0 2 3 1]]
import numpy as np
a=np.random.randint(0,10,(3,4))
print(a)
#沿0轴排序
b=np.argsort(a,axis=0)
print(b)

>>> %Run jiaoben.py
[[6 3 3 7]
 [7 6 3 6]
 [0 9 4 7]]
[[1 2 0 3]
 [2 1 3 0]
 [0 2 3 1]]

20.聚合函数

(1)求和

在这里插入图片描述

import numpy as np
a=np.array([[2,4],[3,5]])
print(np.sum(a)) #所有相加
print(np.sum(a,axis=1)) #沿1轴相加
print(a.sum(axis=0))  #沿0轴相加

>>> %Run jiaoben.py
14
[6 8]
[5 9

(2)求最大值

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
print(np.amax(a)) #所有相加
print(np.amax(a,axis=1)) #沿1轴:每行最大值
print(a.max(axis=0))  #沿0轴:每列最大值

>>> %Run jiaoben.py
5
[4 5]
[3 5]

(3)求最小值

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
print(np.amin(a)) #所有相加
print(np.amin(a,axis=1)) #沿1轴:每行最小值
print(a.min(axis=0))  #沿0轴:每列最小值

>>> %Run jiaoben.py
2
[2 3]
[2 4]

(4)平均值

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
print(np.mean(a)) #所有数均值
print(np.mean(a,axis=1)) #沿1轴:每行均值
print(a.mean(axis=0))  #沿0轴:每列均值

>>> %Run jiaoben.py
3.5
[3. 4.]
[2.5 4.5]

存在nan的时候:nan为numpy中变量,调用时要加 np.nan

import numpy as np
a=np.array([[2,4],
            [3,np.nan]])
print(np.mean(a)) 
print(np.mean(a,axis=1)) 
print(np.nanmean(a))  

>>> %Run jiaoben.py
nan
[ 3. nan]
3.0

(5)加权平均值

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
#weights权重数组,形状要和原数组相同
b=np.average(a,weights=[[0.1,0.2],[0.4,0.3]])
print(b)

>>> %Run jiaoben.py
3.7

21.数组的保存

(1)save( )

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
np.save('array_save',a)

(2)savez( ):多个数组

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
b=np.array([1,2,3,4,5,6])
#保存名字一定要对应
np.savez('array_savez',arrau_a=a,array_b=b)

(3)savez_compressed( )

在这里插入图片描述

import numpy as np
a=np.array([[2,4],
            [3,5]])
b=np.array([1,2,3,4,5,6])
#保存名字一定要对应
np.savez_compressed('array_savez',array_a=a,array_b=b)

22.数组的读取

(1)load( )

在这里插入图片描述

import numpy as np
a2=np.load('array_save.npy')
print(a2)
>>> %Run jiaoben.py
[[2 4]
 [3 5]]

读取npz文件时要用相应的键来读取相应数组

import numpy as np
a=np.load('array_savez.npz')
a1=a['array_a']
b1=a['array_b']
print(a1,'\n',b1)

>>> %Run jiaoben.py
[[2 4]
 [3 5]] 
 [1 2 3 4 5 6]

猜你喜欢

转载自blog.csdn.net/shanhehaoda_/article/details/122577849