【课程笔记】Python数据分析与展示(1)-Numpy

这篇博客介绍了Python数据分析的基础,包括anaconda的使用、数据表示与维度概念,重点讲解了Numpy库的功能,如ndarray对象、数组创建、属性及运算,并展示了如何进行数组转换、数据读写。此外,还涉及图像处理,如图像梯度计算,以及PIL库在图像变换中的应用。
摘要由CSDN通过智能技术生成

mooc课程-北京理工大学
嵩天 教授
课程地址:https://www.icourse163.org/course/BIT-1001870002

数据分析前奏

在这里插入图片描述
anaconda下载和使用
在这里插入图片描述

数据分析之表示

导学

数据的维度
一维数据、二维数据、多维数据、高维数据
在这里插入图片描述

一维数据:列表和集合
二维和多维数据:列表类型
高维数据:字典类型或数据表示格式
json、xml、yaml

Numpy入门

Numpy是一个开源的python科学计算基础库

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合c/c++/Fortran 代码的工具
  • 线性代数、傅里叶变化、随机数生成等过程

numpy 的引用
在这里插入图片描述
N维数组对象:ndarray
在这里插入图片描述

a=[0,1,2,3,4]
b=[9,8,7,6,5]
c=[]
for i in range(len(a)):
    c.append(a[i]**2+b[i]**3)

print(c) 

这里如果使用

c=a**2+b**3

会报错

TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

如果使用numpy

import numpy as np
a=np.array([0,1,2,3,4])
b=np.array([9,8,7,6,5])
c=a**2+b**3
print(c)

在这里插入图片描述
数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。
设置专门的数组对象,经过优化,可以提升这类应用的运算速度。(底层是c)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#ndim-秩
#shape-对象的尺寸
#size-对象元素的个数
#dtype-对象的元素类型
#itemsize-对象每个元素大小

在这里插入图片描述

a=np.array([[0,1,2,3,4],
            [9,8,7,6,5]])
#ndim-秩
print(a.ndim)
#shape-对象的尺寸
print(a.shape)
#size-对象元素的个数
print(a.size)
#dtype-对象的元素类型
print(a.dtype)
#itemsize-对象每个元素大小
print(a.itemsize)

ndarray数组的创建方法
1)从python中的列表、元祖等类型创建ndarray数组
在这里插入图片描述
在这里插入图片描述

#np.arange(n) 类似range()函数,返回ndarray类型,元素0到n-1
print(np.arange(6))
#np.ones(shape) 根据shape生成一个全1数组 默认是浮点数类型
print(np.ones((3,4)))
#np.zeros(shape) 根据shape生成一个全1数组 
print(np.zeros((3,5),dtype=np.int32))
#np.full(shape,val) 根据shape生成一个数组,每个元素都是val
#np.eye(n) 创建正方的n*n单位矩阵,对角线为1,其余为0
print(np.eye(4))

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

print(np.linspace(1,10,4))
print(np.linspace(1,10,4,endpoint=False))

在这里插入图片描述
在这里插入图片描述
ndarray数组向列表转换
ls=a.tolist()
在这里插入图片描述

在这里插入图片描述
写入数据

a=np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')

读数据
在这里插入图片描述

b=np.loadtxt('a.csv',delimiter=',')
print(b)

CSV文件的局限性
csv只能有效存储一维和二维数组
np.savetxt() np.loadtxt()只能有效存取一维和二维数组

多维数组的存取
在这里插入图片描述

a=np.arange(100).reshape(5,10,2)
a.tofile("b.dat",sep=",",format='%d')

如果不指定分割符会生成二进制文件
打开后会看不懂
在这里插入图片描述
在这里插入图片描述

a=np.arange(100).reshape(5,10,2)
a.tofile("b.dat",sep=",",format='%d')
c=np.fromfile("b.dat",dtype=np.int,sep=",")
print(c)
c=np.fromfile("b.dat",dtype=np.int,sep=",").reshape(5,10,2)
print(c)

系统写入文件后,维度信息丢失,需要知道原来的维度信息

在这里插入图片描述

a=np.arange(100).reshape(5,10,2)
np.save("a.npy",a)
b=np.load("a.npy")
print(b)

在这里插入图片描述
存储时有保存格式和数据类型

在这里插入图片描述

a1=np.random.rand(2,3,4)
print(a1)
a2=np.random.randn(2,3,4)#正太分布
print(a2)
a3=np.random.randint(10,20,(2,3))#10到20之间2*3维度
print(a3)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
梯度函数在处理声音和图像边缘的时候可以帮助我们发现声音和图像的边缘
在这里插入图片描述
在这里插入图片描述

from PIL import Image
import numpy as np
im=np.array(Image.open("timg.jpg"))
print(im.shape,im.dtype)

输出结果为图像的高度,宽度,RGB
图像的变换

from PIL import Image
import numpy as np
a=np.array(Image.open("timg.jpg"))
print(im.shape,im.dtype)
#图形的变换
b=[255,255,255]-a
im=Image.fromarray(b.astype('uint8'))#重构图像
im.save("t2.jpg")

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

from PIL import Image
import numpy as np

a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')

depth = 10. 						# (0-100)
grad = np.gradient(a)				#取图像灰度的梯度值
grad_x, grad_y = grad 				#分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A

vec_el = np.pi/2.2 					# 光源的俯视角度,弧度值
vec_az = np.pi/4. 					# 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az) 	#光源对x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az) 	#光源对y 轴的影响
dz = np.sin(vec_el) 				#光源对z 轴的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) 	#光源归一化
b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8')) 	#重构图像
im.save('./beijingHD.jpg')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值