Numpy库

article/2025/9/10 13:09:17

Numpy库入门 

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。

二维数据由多个一维数据构成,是一维数据的组合形式。(表格)

多维数据由一维或二维数据在新维度上扩展形成。

Numpy:开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础. Numpy的引用:import numpy as np 

NumPy的数组对象:ndarray(在程序中的别名是array).

np.array( )输出( )里的数据,若( )里由多个数据需要先组织起来,输出成[ ]形式的数组,元素之间由空格分隔。

np.array()与列表类型不同!,列表中元素间用逗号分隔,np.array()数组中元素用空格分隔,但以列表形式组织

import numpy as np
a = np.array((1.0,2.0,3.0),dtype=int)
print(a.dtype)   #int32
print(a)         #[1 2 3]
b = np.array([[1,2,3],[4,5,6]])
print(b)
print(b.ndim)    #2      #输出维度(秩),如1或2或3……  
print(b.shape)   #(2,3)  #输出数组形状,(m,n)m行n列
print(b.size)    #6      #输出元素个数[[1 2 3][4 5 6]]

numpy是表达N维数组的最基础库。把n维数组看成简单的数据对象,可直接进行操作和运算,所以要求数据类型相同,也助于节省运算和存储空间。而列表是逐个读取数据,故列表的数据类型可以不同。

ndarray的属性

!不是方法,直接.属性,不用在后面加()

 

 ndarray的元素类型

 

comples64:复数类型,实部和虚部都是32位浮点数;complex128:复数类型,实部和虚部都是64位浮点数。

numpy为啥要支持这么多种数据类型?python仅支持整数、浮点数和复数3种类型;科学计算涉及数据多,对存储和性能由较高要求;元素类型的精细定义,利于存储空间及性能优化,助于程序员评估程序规模。在创建ndarray数组时可设定数据类型

ndarray数组的创建

np.ones_like(a):根据数组a的形状生成一个全为1的数组;np.zeros_like(a):根据数组a的形状生成一个全为0的数组;np.full_like(a,val):根据数组a的形状生成一个数组,每个元素值都是val;在科学计算中一般获得的是浮点数(如温度值、声音值)

ndarray数组的变换

维度变换:

.reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变;.resize(shape):与前者一致,但修改原数组.swapaxes(ax1,ax2):将数组n个维度中两个维度进行调换;.flatten( ):数组降维,返回折叠后的一维数组,原数组不变。

import numpy as np 
a = np.ones((3,4)).reshape(-1,6)  #reshape中的-1是指:不知道多少行,但有6列
print(a)
#[[1. 1. 1. 1. 1. 1.]
# [1. 1. 1. 1. 1. 1.]]

数据类型变换 .astype( )  向列表的转换  .tolist( )

ndarray数组的操作

索引:获取数组中特定位置元素的过程;切片:获取数组元素子集的过程[ , ],如果是二维数据,切片中会有两个数。

ndarray数组的运算(一元/二元函数)

对数组的运算就是对数组中每一个元素进行运算

 Numpy的一元函数(对一个数组运算的函数)

 

Numpy的二元函数( 对两个数组进行运算的函数)

+ - * / **:两个数组各元素进行对应运算;np.maximum(x,y)np.minimum(x,y)元素级最大值、最小值计算

np.mod(x,y):元素级的模运算;np.copysign(x,y):将y中各元素值的符号赋值给x对应元素;< > >= != == 算数比较,产生布尔型数组

 

Numpy数据存储与函数

数据CSV文件存取(一维/二维)

CSV (Comma‐Separated Value, 逗号分隔值),是一种常见的文件格式,用来存储批量数据

%d:整数;%1f:一位小数的浮点数类型;

 

np.savetxt('a.csv',a),没有delimiter参数和fmt参数。 np.savetxt('b.csv',a,fmt='%.1f'),没有delimiter参数。

 np.savetxt('c.csv',a,fmt='%d',delimiter=' '),delimiter参数为空格;np.savetxt('d.csv',a,fmt='%d',delimiter=',')delimiter参数为,

np.loadtxt('a.csv') ;data = np.loadtxt('a.csv',delimiter=',');data = np.loadtxt('a.csv',delimiter=',',dtype=int)

np.loadtxt默认输出德类型为float,即使没有dtype=float

这种程序无法简单用.loadtxt读取,因为时字符串形式(一个格子里有两个元素),可以csv中先分列 。

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

多维数据的存取 a.tofile( )\np.fromfile( )

二进制空间比文本文件占用空间更小,由于看不到内容,只能作为数据备份的方式。

b---二进制;d---十进制;o---八进制;x---十六进制

注意: 该方法读取时需要知道文件的数组维度和元素类型。a.tofile( )和np.fromfile( )需配合使用,可通过元组文件来存储额外信息。

NumPy的便捷文件存储 np.save( )\np.savez( )\np.load( )

存储/打开文件是以.npy为扩展名的。 需要用IDE打开

 numpy的随机数函数子库random子库np.random.rand(数组形状)/randn()/randint()/seed()

 

shuffle/permutation:行的随机上下跳动。choice(a,(,),p=):从一个数组中随机抽取,生成特定形状的新数组,抽取数据可有概率。

 

NumPy的统计函数  np.*

 axis=0 : 表示纵轴,进行操作的方向为从上到下axis=1 : 表示横轴,进行操作的方向为从左到右。

NumPy的梯度函数 np.gradient( )

梯度反映元素的变化率,在图像、声音批量数据处理时,梯度助于发现图像或声音的边缘

np.gradient(f):计算数组f中元素的梯度,当f为多维时,返回每个维度梯度。梯度:连续值之间的变化率(即斜率)。XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,其中b的梯度是(c-a)/2

Numpy、PIL中的图像的手绘效果

图像的数组表示

图像一般都会采用一种模式——RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。

RGB三个颜色通道的变化和叠加得到各种颜色,R取值范围0-255,G取值范围0-255,B取值范围0-255。包括了视力所能感知的所有颜色。图像是一个三维数组,维度分别是高度、宽度和像素RGB值。

PIL库(Python处理图像的功能库,第三方库)图像是一个由像素组成的二维矩阵,每个元素是一个RGB值。

图像的简单变换 

图像可表示为一个数组,而数组是可以运算的,经过运算后的数组可以改变图像的形状。

.astype( ):数组类型的转变,先对原始数据进行拷贝。详见Numpy库入门

图像的手绘效果

手绘效果的特征:黑白灰色;边界线条较重;相同或相近色彩趋于白色;略有光源效果。在图像灰度化的基础上,由立体效果和明暗效果叠加而成,灰度代表图像的明暗变化,梯度值表示灰度的变化率。通过调整像素的梯度值来间接改变图片的明暗程度。立体效果通过添加虚拟深度值来实现。

from PIL import Image
import numpy as npa = np.asarray(Image.open('C:/Users/木头目/Desktop/picture.png').convert('L')).astype('float')depth = 10                            #预设深度值为10,取值范围0-100
grad = np.gradient(a)
grad_x,grad_y=grad                    #提取x和y方向的梯度值
grad_x = grad_x * depth/100
grad_y = grad_y*depth/100             #根据深度调整x和y方向的梯度值(对深度值进行归一化)
A = np.sqrt(grad_x**2 + grad_y**2 + 1)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1/Avec_el = np.pi/2.2                     #光源的俯视角度,弧度制
vec_az = np.pi/4                       #光源的方位角度,弧度制
dx = np.cos(vec_el)*np.cos(vec_az)     #np.cos(vec_el)为单位光线在地平面上的投影长度
dy = np.cos(vec_el)*np.sin(vec_az)
dz = np.sin(vec_el)                    #dx,dy,dz是光源对x/y/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('C:/Users/木头目/Desktop/picture8.png')


http://chatgpt.dhexx.cn/article/UsKqDeKT.shtml

相关文章

Python Numpy库的超详细介绍

Numpy库是Python中的一个科学计算库,本文主要介绍了ndarray的基本操作、 ndarray运算等各种Numpy库的超详细教程,需要的朋友可以参考下 1、Numpy概述 1.1 概念 Python本身含有列表和数组&#xff0c;但对于大数据来说&#xff0c;这些结构是有很多不足的。由于列表的元素可以…

python进阶--Numyp库(一)

一、Numpy库介绍 NumPy&#xff08;Numerical Python&#xff09;是Python的⼀种开源的数值计算扩展。提供多维数组对象&#xff0c;各种派⽣对象&#xff08;如掩码数组和矩阵&#xff09;&#xff0c;这种⼯具可⽤来存储和处理⼤型矩阵&#xff0c;⽐Python⾃身的嵌套列表&am…

解决端口8080被占用的问题!

今天在回顾cms项目的时候发现怎么都启动不了&#xff0c;看见左下角报错 原来是8080端口被别的进程占用了。 解决方法&#xff1a;winr cmd 回车 在命令窗口中 输入netstat -ano就可以查看所有端口显示的状态信息 找到这个本地地址是0.0.0.0:8080最后面的PID&#xff0c;就是…

8080端口被占用怎么办

做项目时肯定会遇到8080端口被占用的情况&#xff0c;其实解决办法很简单&#xff1a; CtrlR键&#xff0c;输入cmd: 复制这串代码到cmd界面&#xff1a; netstat -aon|findstr "8080" 可以看到8080确实被占用了&#xff1a; 把后面的都终止掉&#xff…

解决localhost:8080被占用

解决方法如下&#xff1a; 1.以管理员方式打开CMD&#xff0c;我的电脑——c盘——windows——system32——CMD.exe——右键管理员身份打开 1.在cmd里输入netstat -ano|findstr 8080&#xff0c;查看是哪个进程占用了8080端口。 2.输入taskkill /pid 11904 /f&#xff0c;结束…

解决SpringBoot默认Tomcat端口号8080被占用

问题描述&#xff1a; 打开Eclipse后启动SpringBoot项目&#xff0c;发现8080端口被占用。然后寻找Eclipse是否有未关闭的Tomcat项目&#xff0c;发现并没有&#xff0c;重启Eclipse仍然会出现端口占用的请况。 给出的错误信息显示。 Description: The Tomcat connector co…

解决tomcat端口8080被占用

1、eclipse启动tomcat时8080端口被占用&#xff1a; 2、打开CMD&#xff1a; 命令查找正在使用8080端口的进程&#xff0c; netstat -ano|findstr 8080 杀死该进程&#xff0c; taskkill /pid 117800 /f 命令说明&#xff1a;taskkill /pid 117800&#xff08;进程id号&am…

idea报8080端口被占用解决

1错误提示 Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port. 2原因 这是因为我们某个程序占用了8080端口&#xff0c;有可能是我们以前某个项目没有正确暂停导致。 3解决 1&#xff1a;打开cmd窗…

Tomcat 8080 端口被占用解决方案

1. 报错记录 原因&#xff1a;端口号8080被其他应用程序占用 2. 解决方案 方案一&#xff1a;结束占用端口程序 在Windows控制台中输入下面内容查询占用8080端口的进程id netstat -ano|findstr "8080" ctrlshiftesc打开任务管理器&#xff0c;在服务通过pid找到占用程…

解决8080端口号被占用问题

在使用TomCat时偶尔会出现8080端口被占用的提示&#xff0c;为此总结出如下解决方法&#xff1a; 1.以管理员身份打开命令提示符 2.输入netstat -ano|findstr "8080" 3. 上图最右边的6636、3280、6636为进程id,接下来就要结束这些进程 4.输入taskkill /f /pid 663…

解决windows系统下8080端口被占用

1.winR&#xff1a;输入cmd&#xff0c;回车 输入指令&#xff1a;netstat -ano | findstr 8080 指令的意思是找出占用8080端口的进程pid 2. 此时找到8080端口号的pid是11660&#xff08;pid是会变化的&#xff09; 终止进程 释放端口 输入指令&#xff1a;taskkill …

解决SpringBoot8080端口被占用问题

问题描述&#xff1a; 大致意思是我们使用的8080端口已经被占用了。 解决方法&#xff1a; 方法一&#xff1a;修改我们要使用的端口 在resource目录下面找到application.properties然后输入 server.port 8081&#xff08;注意&#xff1a;这里不一定非要是8081&#xff0c;…

解决tomcat 8080端口被占用问题

首先&#xff0c;我们要看一下究竟是什么占用了8080端口&#xff1a; winr 打开运行窗口输入 cmd 输入 netstat -ano 查看开放的所有端口 端口太多&#xff0c;我们可以使用 netstat -ano|findstr "端口号" 查看占用8080端口的进程 netstat -ano|findstr "8080…

Ubuntu的8080端口被占用

因为最近学习web建站技术&#xff0c;弄了好多环境&#xff0c;今天开机启动服务的时候报了如下错误&#xff1a; 意思就是我的8080端口已经被别的进程占用了&#xff0c;导致服务启动异常。解决办法so easy, 找到占用8080端口的进程&#xff0c;直接kill掉就好啦。百度一下&a…

8080端口被占用

当我们执行spring项目或者关闭spring项目新建另外一个spring项目时&#xff0c;idea后台显示 ‘8080’ 端口已被占用。 解决方法&#xff1a; 1.快捷键&#xff1a;winR 打开 2.输入cmd 3.在dos命令中输入 netstat -aon|findstr “8080” &#xff1a;查找pid 4.在任务管理器…

新建服务器显示8080被占用,快速解决eclipse/myeclipse下的tomcat服务器端口号8080被占用的简单方法...

使用过tomcat服务器的人都会不可避免的遇到tomcat端口号被占用的情况。tomcat端口号被占用造成的原因很多&#xff0c;但本文只是针对由于打开多个版本的eclipse/myeclipse或者是tomcat端口关闭不正常造成的tomcat端口号被占用的现象。 一般情况下会比较少遇到上述的两种情况&a…

2012年度最受欢迎中国开源软件评选

http://www.oschina.net/project/top_cn_2012 afinal Afinal 是一个android的 orm 和 ioc 框架。而且封装了android中的httpClient&#xff0c;使其更加简单易用。使用finalBitmap&#xff0c;无需考虑bitmap在and... 当前票数&#xff1a; 957 投票 Alice UI Alice 是支付宝前…

参与评选开源软件名单

afinal Afinal 是一个android的 orm 和 ioc 框架。而且封装了android中的httpClient&#xff0c;使其更加简单易用。使用finalBitmap&#xff0c;无需考虑bitmap在and... 当前票数&#xff1a; 957 投票 Alice UI Alice 是支付宝前端样式解决方案小组的项目代称&#xff0c;其包…

中文分词

&#xfeff;&#xfeff; MFSOU中文分词PHP扩展 一个PHP函数实现中文分词。使分词更容易&#xff0c;使用如下图: SCWS调用示例 SCWS Hightman开发的一套基于词频词典的机械中文分词引擎&#xff0c;它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典&#xff0c…

中文分词 及发展现状(总结的不错)

中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道&#xff0c;在英文的行文中&#xff0c;单词之间是以空格作为自然分界符的&#xff0c;而中文只是字、句和段能通过…