Python Numpy库用法笔记

用于日常学习的积累,如有不足请多多指教。

一、简单了解Numpy

Numpy可以看成是2个缩写单词拼接而成:
·num(numerical) 数值化的
·py(python)
Numpy→数值计算库

  1. Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。

  2. Numpy使用ndarray对象来处理多维数组,该对象是一个快速而且灵活的大数据容器。

ndarray可以看成是3个缩写单词拼接而成:
·n任意个
·d(dimension)维度
·array数组

1.1通过ndarray存储数据

import numpy as np

np.array([[80,58,75,78],
        [98,70,85,84],
        [90,75,90,90],
        [88,70,82,80]])

在这里插入图片描述

1.2 ndarray在计算中的优势

Numpy在计算中的优势
1.存储内容
1)ndarray存储数据类型相同且存储地址连续,但通用性不强
2)list存储数据类型可以不相同,存储地址不一定连续,但通用性强
2.ndarray支持并行化运算
3.Numpy底层使用C语言编写,数组操作不受Python解释器的影响,效率高于纯Python代码

  • 代码示例:
import numpy as np
import time
import random

mylist=[i for i in range(100000000)]
myndarray=np.array(list)

start_time1=time.time()
sum(mylist)
end_time1=time.time()

start_time2=time.time()
np.sum(myndarray)
end_time2=time.time()

print(f"list运算时间:{end_time1-start_time1}")
print(f"ndarray运算时间:{end_time2-start_time2}")

结果:
在这里插入图片描述

二、ndarray的属性

属性名字属性解释
ndarray.shape数组位的的元组
ndarray.dtype数组元素的类型
ndarray.ndim数组维度
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度
  • 代码示例:
import numpy as np

output_value=np.array([[80,58,75,78],
                        [98,70,85,84],
                        [90,75,90,90],
                        [88,70,82,80]])
output_value.shape
output_value.dtype
output_value.ndim
output_value.size
output_value.itemsize

在这里插入图片描述

三、基本操作

3.1 生成数组的方法

3.1.1生成0和1

np.zeros(shape) #生成一组全是零的数组
npones(shape) #生成一组全是一的数组
  • 代码示例:
np.zeros(shape=(4,4))

在这里插入图片描述

3.1.2 从现有数组中生成

np.array() #深拷贝
np.copy() #深拷贝
np.asarray() #浅拷贝

深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。
浅拷贝只是一种简单的拷贝 拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间。

  • 代码示例:
myarray=np.zeros(shape=(2,2))
array1=np.array(myarray)
array2=np.copy(myarray)
array3=np.asarray(myarray)

print(f"array1:\n{array1}\narray2:\n{array2}\narray3:\n{array3}\n")

myarray[0][0]=1

print(f"array1:\n{array1}\narray2:\n{array2}\narray3:\n{array3}\n")

结果:
在这里插入图片描述

3.1.3生成固定单位的数组

np.linspace(start,stop,num,...)
#start、stop→左闭右闭:[start, stop]
#num:生成等距离数据的个数

np.arange(start,stop,step,...)
#start、stop→左闭右闭:[start, stop)
#step是步长
#(与range(start,stop,step)类似)
  • 代码示例:
np.linspace(0, 10, 5)

np.arange(0, 10, 2)

结果:
在这里插入图片描述
在这里插入图片描述

3.1.4 生成随机数组

np.random.uniform(low=-1,high=1,size=100) #均匀分布生成随机数
np.random.normal(loc=0.0,scale=1.0,size=None) #正态分布生成随机数
#loc:此概率分布的均值
#scale:此概率分布的标准差
#size:输出的shape
  • 代码示例:
np.random.uniform(low=-1,high=1,size=100)

np.random.normal(loc=0.0,scale=1.0,size=100)

结果:
均匀分布生成随机数
正态分布生成随机数

3.2 数组的索引、切片

3.2.1 一维数组的切片、索引

data=np.random.uniform(low=-1,high=1,size=10)
print(data)

#索引:第5个数据
print(data[4])

#切片:第3到5个数据
print(data[2:5])

结果:
一维数组的切片、索引

3.2.2 二维数组的切片、索引

data2=np.array([[80,58,75,78],
                [98,70,85,84],
                [90,75,90,90],
                [88,70,82,80]])
                
#索引:第2行第3个数据
print(data2[1,2])

#切片:第2行第2-3个数据
print(data2[1,1:3])

结果:
二维数组的切片、索引

3.2.3 三维数组的切片、索引

data3=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(data3)

#索引
print(data3[1,0,1])

#切片
print(data3[0,1,0:2])

三维数组的切片、索引

3.3 形状的修改

ndarray.reshape(shape) 返回新的ndarray,原始数据没有改变
ndarray.resize(shape) 没有返回值,对原始的ndarray进行了修改
ndarray.T 转置 行变成列,列变成行
data4=np.array([[1,2,3,4],
                [5,6,7,8],
                [9,10,11,12]])
                
print(data4.reshape(4,3)) #返回一个新的ndarray
print(data4)

data4.resize(4,3) #没有返回值
print(data4)

data4=np.array([[1,2,3,4],
                [5,6,7,8],
                [9,10,11,12]])

print(data4.T) #返回一个新的ndarray
print(data4)

结果:
在这里插入图片描述

3.4类型的修改

ndarray.astype(np.int64)
  • 代码示例:
data4=np.array([[1,2,3,4],
                [5,6,7,8],
                [9,10,11,12]])

print(data4.dtype)

print(data4.astype(np.float64))

结果:
ndarray类型的修改

3.5数组的去重

np.unique(ndarray)
  • 代码示例:
data5=np.array([[1,2,3,4],
                [3,4,5,6],
                [5,6,7,8]])

print(np.unique(data5)) #返回一个新的ndarray
#或者使用
#print(set(temp.flatten()))

结果:
在这里插入图片描述

四、ndarray运算

4.1 逻辑运算

4.1.1布尔索引

  • 代码示例:
data5=np.array([[1,2,3,4],
                [3,4,5,6],
                [5,6,7,8]])
                
print(data5 > 5) #将data5中全部元素与5比较大小,并返回布尔值

data5[data5 > 5]=0	#提取data5中大于5的值
print(data5)

结果:
布尔索引

4.1.2通用判断

np.all(bool)
#全是True返回True
np.any(bool)
#有一个True返回True
  • 代码示例:
data5[data5 > 5]=0

np.all(data5) #False

np.any(data5) #True

在这里插入图片描述

4.1.3 三元运算符

np.where(bool,改变True位置的值,改变False的位置的值)

np.logical_and()
np.logical_or()
  • 代码示例:
np.where(data5,1,0)	#np.where(data5!=0,1,0)

结果:
在这里插入图片描述

np.where(np.logical_and(data5>2,data5<5),1,0)

np.where(np.logical_or(data5>2,data5<5),1,0)

结果:
在这里插入图片描述

4.2 统计运算

4.2.1 统计指标

np.min(ndarray,axis,...)
np.max(ndarray,axis,...)
np.median(ndarray,axis,...)
np.mean(ndarray,axis,...)
np.std(ndarray,axis,...)
np.var(ndarray,axis,...)
#axis=1:按行计算
#axis=0:按列计算
  • 代码示例:
np.max(data5,axis=1)

结果:
在这里插入图片描述

4.2.2 返回最大值、最小值的位置

np.argmax(temp, axis)
np.argmin(temp, axis)
  • 代码示例:
np.argmax(data5,axis=1)

结果:
在这里插入图片描述

4.3 数组间运算

4.3.1 数组与数的运算

将数组内所有的数字分别与另外的数进行四则运算。

  • 代码示例:
data5+1

data5*5

数组与数的运算

4.3.1 数组与数组的运算

当操作两个数组时,numpy会比较他们的形状(shape),当满足下列情况时才能进行运算:

  • 维度相同
  • shape中又一个位置为1

比如
①[[1,0],[0,4]]
shape(2,2)=> shape(1,2,2)
②[[[1,0],[0,4]],[[1,0],[0,4]]]
shape(2,2,2)

①+②=[[[2, 0], [0, 8]], [[2, 0], [0, 8]]]

  • 代码示例:
arr1=np.array([[1,2],[3,4]])
arr2=np.array([[1,0],[0,4]])
arr3=np.array([[1,1],[0,0],[2,2]])
arr4=np.array([[[1,0],[0,4]],[[1,0],[0,4]]])

arr2+arr4

arr1*arr2

arr2*arr3 #抛出异常,shape不同

结果:
在这里插入图片描述

4.4 矩阵运算

矩阵必须是二维的

4.4.1 矩阵存储方法

  1. ndarray的二维数组
  2. matrix
np.mat()

4.4.2 矩阵的乘法

矩阵乘法规则:
第一个矩阵列数=第二个矩阵行数
(m行,n列)*(n行,s列)=(m行,s列)

np.matmul(mat,mat)
np.dot()
  • 代码示例:
np.matmul(arr1,arr2) #用ndarray存储时的运算

mat1=np.mat(arr1)
mat2=np.mat(arr2)

mat1*mat2

结果:
在这里插入图片描述

五、ndarray的合并、分割

5.1ndarray的合并

np.hstack(ndarray,ndarray)	#水平拼接
np.vstack(ndarray,ndarray) #竖直拼接
np.concatenate((ndarray,ndarray,...),axis)
  • 代码示例:
a=np.array([1,2])
b=np.array([3,4])
c=np.array([[5],[6]])

np.hstack((a,b))
np.concatenate((a,b),axis=0)
#array([1, 2, 3, 4])

np.vstack((a,b))
#array([[1, 2],
       [3, 4]])
np.concatenate(((np.vstack((a,b))),c),axis=1)
#array([[1, 2, 5],
       [3, 4, 6]])

结果:
在这里插入图片描述

5.2 ndarray的分割

np.split(ndarray,sections,axis)
  • 代码示例:
a=np.arange(0,10)
#[0 1 2 3 4 5 6 7 8 9]

np.split(a,5)
#[array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]

np.split(a,[1,5,9])
#[array([0]), array([1, 2, 3, 4]), array([5, 6, 7, 8]), array([9])]

结果:
在这里插入图片描述

六、IO操作与数据处理

np.genfromtxt(path,delimiter)
#delimiter为分隔符

==注意:==无法读取字符串,会变成缺失值
解决方法
1)删除缺失值
2)替换缺失值

  • 代码示例:
np.genfromtxt(r"C:\Users\pc\Desktop\a.txt",delimiter=',')

结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fqlll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值