首页 > 编程语言 >python学习笔记五:numpy

python学习笔记五:numpy

时间:2023-02-18 10:07:11浏览次数:36  
标签:10 plt python 笔记 print 数组 np n1 numpy


ndarray是一个多维数组的数据结构

1.彩色图像是一个三维数组,通过matplotlib显示图像

#显示图像
import numpy as np
import matplotlib.pyplot as plt

fish = plt.imread('HappyFish.jpg')
print(fish.shape)
print(type(fish))
运行结果:
(194, 259, 3)
<class 'numpy.ndarray'>

plt.subplot(1,2,1)
plt.imshow(fish)

fish2 = fish - 2
plt.subplot(1,2,2)
plt.imshow(fish2)

python学习笔记五:numpy_级联

 2.使用np.arrray创建数组

#一维数组
n1 = np.array([3,1,4,5])

#二维数组
n2 = np.array([[2,3,4,5],[3,4,6,7],[4,6,7,8]])

#三维数组
n3 = np.array([[[1,2,3],[2,3,4]],[[3,4,5],[4,5,6]]])

3.使用list,ones,zeros,full,eye,linspace,arange创建数组

#使用列表创建np.array
#如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
n4 = np.array([1,2.5,'python'])

#通过ones创建二维数组
#Shift+Tab查看方法的参数
np.ones((3,4),dtype = int)

#通过ones创建三维数组
ones = np.ones((100,80,3),dtype=float)

#通过zeros生成0数组
zeros = np.zeros((100,80,3),dtype=float)


#生成指定数字填充的数组
np.full((3,4),fill_value=6)

#生成单位数组
np.eye(3)

#使用线性等分生成数组lin=linear
np.linspace(1,9,5)

#按步长生成数组,左闭右开
np.arange(1,7,3)

4.使用randint,,randn,normal,random生成随机数组

#生成随机整数的数组
np.random.randint(0,10,5)

#生成正态分布的数组,以0为锚点
np.random.randn(20)

#以自定义锚点为中心生成正态分布,scale波动系数
np.random.normal(loc = 175,scale = 1,size =10)

#生成0到1的随机数组
np.random.random(size = (4,4,3))

5.数组索引

#二维索引
n2 = np.random.randint(0,100,(3,4))
n1[1,3]

#多维索引
n5 = np.random.randint(0,100,(3,4,5))
n5[1,3,2]

6.数组的切片

#数组的切片,切片时左闭右开
n2 = np.random.randint(0,10,size = 10)
n2[0:5]

#三维数组的切片
n3 = np.random.randint(0,10,(3,4,3))
n3[0:2,0:2,0:2]

7.数组的翻转与排序

#数组的翻转,排序
n1 = np.arange(0,10,1)
print(n1[::2])#正着取,步长为2,第一个冒号代表切片
print(n1[::-1])#反着取,步长为1
n1.sort()#从小到大排序

8.数组的变形

#变形
n1 = np.arange(0,10,1)
n2 = n1.reshape((5,2))

#将3维图像变形为1维
import matplotlib.pyplot as plt
fish = plt.imread('HappyFish.jpg')
print(fish.shape)
fish_1D = fish.reshape(194*259*3)#fish.reshape(-1)也可以直接转变为1维

9.级联

n1 = np.random.randint(0,10,(5,5))
print(n1)
np.concatenate((n1,n1))#按行级联
np.concatenate((n1,n1),axis = 1)#按列级联

#np.hstack水平及联np.vstack垂直级联,自己处理自己
#水平级联
n1 = np.array([[1,2,3],[2,3,4],[3,4,5]])
n2 = np.hstack(n1)

#垂直级联
n1 = np.arange(0,10,1)
n2 = np.vstack(n1)

#三维数组的级联
fish0 = np.concatenate((fish,fish))#默认axis = 0,即按行连接
plt.subplot(1,2,1)
plt.imshow(fish0)

fish1 = np.concatenate((fish,fish),axis = 1)#axis = 1,按列连接
plt.subplot(1,2,2)
plt.imshow(fish1)

python学习笔记五:numpy_fish_02

10.切分 

与级联类似,三个函数完成切分工作:
np.split
np.vsplit
np.hsplit

n5 = np.random.randint(0,10,size = (5,5))
print(n5)
print(np.split(n5,(1,3)))#axis默认为0,按行切分
print(np.split(n5,(1,3),axis = 1))#axis为1时按列切分

#三维数组的切分
fish2 = np.split(fish,(97,194))[0]#按行切,去切分后的第一部分
plt.subplot(1,2,1)
plt.imshow(fish2)

fish3 = np.split(fish,(130,259),axis = 1)[1]#按列切,去切分后的中间部分
plt.subplot(1,2,2)
plt.imshow(fish3)

python学习笔记五:numpy_级联_03

11.副本

#当数据是ndarray类型时,对赋值后的对象的操作也对原对象生效,相当于引用同一地址,并没有创建副本。可通过np.copy来创建副本

l = [1,2,3,4]
n1 = np.array(l)
print(n1)
n2 = n1
n2[2] = 5
print(n2)
print(n1)
运行结果:
[1 2 3 4]
[1 2 5 4]
[1 2 5 4]

n1 = np.arange(1,5,1)
print(n1)
n2 = np.copy(n1)
n2[2] = 5
print(n2)
print(n1)
运行结果:
[1 2 3 4]
[1 2 5 4]
[1 2 3 4]

12.ndarray的聚合操作

求和np.sum
求最大值np.max
求最小值np.min
求平均值np.mean
找出符合条件值的索引np.argwhere¶
求最大值的索引np.argmax
求最小值的索引np.argmin

#一维
n1 = np.arange(0,10,1)
print(n1)
print(np.sum(n1))
print(np.max(n1))
print(np.min(n1))
print(np.mean(n1))

#三维
n3 = np.random.randint(0,10,size = (4,4,3))
print(n3)
print(np.max(n3,axis = 0))#当axis=0时看第1维,axis=1时,看第2维,axis=2时,看第3维
print(np.min(n3,axis = 1))
print(np.sum(n3,axis = 0))
print(np.mean(n3,axis = 1))

#求索引
n1 = np.random.randint(0,10,size = 10)
print(n1)
#最大最小值索引
print(np.argmin(n1))
print(np.argmax(n1))
#符合条件值的索引
index = np.argwhere(n1>5)
print(index)
n1[index]

13.数组的矩阵操作

#数组的加减乘除,每个元素都对应加减乘除
n = np.random.randint(0,10,size=(2,3))
print(n)
print(n+10)
print(n*2)

#矩阵对应元素加减乘
print(np.add(n,n))#矩阵对应元素相加
print(np.subtract(n,n))#矩阵对应元素相减
print(np.multiply(n,n))#矩阵对应元素相乘
print(np.divide(n,n))#矩阵对应元素相乘除

#矩阵乘积
n1 = np.random.randint(0,10,size = (2,3))
n2 = np.random.randint(0,10,size = (3,2))
np.dot(n1,n2)

14.数组的排序

np.sort()与ndarray.sort()都可以,但有区别:
np.sort()不改变原来数组,重新创建一个对象
ndarray.sort()改变原来数组,本地处理,不占用空间
部分排序np.partition(a,k):
当k为正时,我们想要得到最小的k个数
当k 为负时,我们想要得到最大的k个数


#定义冒泡排序方法
def sortn(nd):
for i in range(nd.size):
for j in range(i+1,nd.size):
if(nd[j] < nd[i]) :
nd[i],nd[j] =nd[j],nd[i]
return nd

#利用一个for循环实现排序,降低复杂度
def sortnd(nd):
for i in range(nd.size):
min_index = np.argmin(nd[i:]) + i
nd[min_index],nd[i] = nd[i],nd[min_index]
return nd

#利用python里封装好的方法进行排序
n1 = np.random.randint(0,10,size=10)
np.sort(n1) #np.sort(),原来数据没有改变,重新创建了一个对象
n1.sort()#没有return即没有返回,ndarray.sort(),原来的数据进行了改变

#部分排序
n1 = np.random.randint(0,100,size = 20)
np.partition(n1,5)#得到最小的5个数,后面的数没有排序
np.partition(n1,5)[:5]#得到最小的5个数
np.partition(n1,-5)[-5:]#得到最大的5个数

15.ndarray应用实例

import matplotlib.pyplot as plt
fish = plt.imread('HappyFish.jpg')
plt.subplot(2,2,1)
plt.imshow(fish)

#水平方向上颠倒
fish1 = fish[::-1]
plt.subplot(2,2,2)
plt.imshow(fish1)

#既在水平方向上颠倒,又在竖直方向上颠倒
fish2 = fish[::-1,::-1]
plt.subplot(2,2,3)
plt.imshow(fish2)

#前两维不颠倒,第三位颠倒,即将颜色颠倒,红的变蓝
fish3 = fish[::,::,::-1]
plt.subplot(2,2,4)
plt.imshow(fish3)

python学习笔记五:numpy_numpy_04

标签:10,plt,python,笔记,print,数组,np,n1,numpy
From: https://blog.51cto.com/u_14036511/6065047

相关文章

  • opencv学习笔记七十一:图像修复
    当我们的照片有划痕或遭到人为的涂鸦(比如马赛克)时,如果我们想让这些遭到破坏的图片尽可能恢复到原样,Opencv能帮我们做到吗?答案是肯定的。那么图像修复技术的原理是什么呢?简......
  • python学习笔记四:字典
    字典和集合一样是无序的,不能通过索引来存取,只能通过键来存取。字典的键必须是不可变的数据类型,如数字,字符串,元组等,列表等可变对象不能作为键。不允许同一个键出现两次,创建......
  • python学习笔记三:元组和集合
    学习python的小伙伴们经常会有这样一个疑问,既然有列表里,问什么还要有元组呢。因为列表是可变的,而元组是不可变的。比如我们经常需要传入函数的数据是不变的,这时就要用到元组......
  • python学习笔记二:列表
    列表通过索引读取数据:#索引读取数据a=[1,2,3]a[-1]运行结果:3列表支持嵌套:b=[[1,2,3],[4,5,6]]print(b)运行结果:[[1,2,3],[4,5,6]]列表可以修改:b=[[1,2,3],[4,5,6......
  • python学习笔记一:基本数据类型
    1、python的一切都是对象,对象是包含属性和方法的一个整体。2、数据类型的组成:身份(内存地址,通过id方法可看它的唯一标识符);类型(通过type方法查看);值(数据项)3、常用基本数据类型......
  • 新概念2册L33笔记(介词+空间)
    L33Outofthedarkness重点词汇explainv.explainsthtosb向某人解释explanationn.stormn.heavystorms暴风雨towardsprep.向、朝、(在空间/时间上接近)strug......
  • python-菜鸟娱乐
    计算两个数的最大公约数点击查看代码defcommon_divisor(m,n):whilem:ifm<n:t=mm=nn=t......
  • ubuntu18.04 添加python3.8环境
    默认是3.6,最好不要动,不要升级,直接加一个3.8环境进去就好。1、准备工作sudoaptupdatesudoaptinstallsoftware-properties-common 2、将DeadsnakesPPA添加到系......
  • 读Java实战(第二版)笔记13_Java模块系统
    1. NicolaiParlog编写的TheJavaModuleSystem1.1. 推荐阅读2. Jigsaw项目2.1. 开发持续了将近十年3. 关注点分离3.1. separationofconcern,SoC3.2. 将......
  • python魔法方法
    python魔法方法1.基本的魔法方法(1)__init__方法用于对实例进行初始化,在实例创建是会自动执行。classHello():def__init__(self):print("HelloWorld!")......