numpy函数

本文详细介绍了numpy库,包括如何定义二维数组、创建数组、数据类型、切片索引、数组广播运算以及丰富的函数应用。内容涵盖numpy的Ndarray对象、数据类型、特殊方法创建数组、从已有数据创建数组、数组操作、迭代和广播原理等,是学习numpy的全面指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

numpy介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

mumpy是一个运行速度非常快的数学库,主要用于数组计算,包含:

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

numpy安装

pip install numpy
 
验证
>>>from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

NumPy Ndarray 对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。 ndarray 对象是用于存放同类型元素的多维数组。 ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

一个指向数据(内存或内存映射文件中的一块数据)的指针。 数据类型或 dtype,描述在数组中的固定大小值的格子。 一个表示数组形状(shape)的元组,表示各维度大小的元组。 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

ndarray 的内部结构:


 

 

创建数组对象

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

名称:        描述: object        数组或嵌套的数列 dtype        数组元素的数据类型,可选 copy        对象是否需要复制,可选 order        创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) subok        默认返回一个与基类类型一致的数组 ndmin    指定生成数组的最小维度

import numpy as np 
a = np.array([1,2,3])  
print (a)

 定义一维数组

from numpy import *
import numpy as np
b=np.array([1,2,3])
print(b)
print(b.dtype)
print(b.shape)

定义二维数组

from numpy import *
import numpy as np
c=np.array([['a','b','c']])
print(c)
print(c.shape)

定义最小维度

from numpy import *
import numpy as np
d=np.array([1,2,3],ndmin=2)
print(d)

numpy数据类型

名称

描述

bool_布尔型数据类型(True 或者 False)
int_  默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc与 C 的 int 类型一样,一般是 int32 或 int 64
intp  用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8  字节(-128 to 127)
int16整数(-32768 to 32767)
int32整数(-2147483648 to 2147483647
int64整数(-9223372036854775808 to 9223372036854775807)
uint8无符号整数(0 to 255)
uint16无符号整数(0 to 65535
uint32无符号整数(0 to 4294967295)
uint64无符号整数(0 to 18446744073709551615)
float_float64 类型的简写
float16半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_complex128 类型的简写,即 128 位复数
complex64复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128复数,表示双 64 位浮点数(实数部分和虚数部分)

数据类型对象 (dtype)

数据类型对象(numpy.dtype 类的实例)用来描述与数组对应的内存区域是如何使用,它描述了数据的以下几个方面: 数据的类型(整数,浮点数或者 Python 对象) 数据的大小(例如, 整数使用多少个字节存储) 数据的字节顺序(小端法或大端法) 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分 如果数据类型是子数组,那么它的形状和数据类型是什么。 

字节顺序是通过对数据类型预先设定 < 或 > 来决定的。 < 意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。> 意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。
 

指定数据类型

from numpy import *
import numpy as np
e=np.array([1,2,3],dtype=float32)
print(e)

 定义数据类型对象

from numpy import *
import numpy as np
dt=np.dtype(np.int32)
dt=np.dtype('f4')

用户定义数组

from numpy import *
import numpy as np
a=np.array([1,2,3],dtype=dt)
print(a)

定义数据类型

from numpy import *
import numpy as np
#int8,int16,int32,int64可以使用字符串代替'i1','i2','i4','i8'
#字符串以使用字符串代替'S30'
#浮点型以使用字符串代替'f4'
#定义数据类型
st=np.dtype([('name','S30'),('age','i1'),('marks','f4')])
b=np.array([('abc',21,50),('zxc',18,81),('yyy',25,90)],dtype=st)
print(b)
print(len(b))

numpy创建数组

特殊方法创建数组

1.创建空数组

from numpy import *
import numpy as np
n=np.empty([3,3],dtype=np.float32,order='C')
print(n)

2.创建零数组

from numpy import *
import numpy as np
z=np.zeros([2,2],dtype='i4',order='C')
print(z)

3.创建原组数组

from numpy import *
import numpy as np
x=np.zeros([2,2],dtype=[('x','i1'),('y','i4')])
print(x)
print(len(x))

4.创建一维数组

from numpy import *
import numpy as np
c=np.ones([3,3],dtype='f4')
print(c)

从已有数据创建数组

1.元组转数组

from numpy import *
import numpy as np
aa=np.arange(10,20,2,dtype=float)
print(aa))

2.将元组列表转为数组

from numpy import *
import numpy as np
lt=[(1,2,3),(4,5)]
alt=np.asarray(lt,dtype=object)
print(alt)

从数组范围创建数组

1.访问创建数组

from numpy import *
import numpy as np
aa=np.arange(10,20,2,dtype=float)
print(aa))

数组操作

 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。 ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

切片与索引

1.通过切片获取数据

from numpy import *
import numpy as np
a=np.arange(20)
print(a)

 2.定义切片

from numpy import *
import numpy as np
a=np.arange(20)
b=slice(3,9,2)
print(a[b])

3.通过索引获取值

from numpy import *
import numpy as np
a=np.arange(20)
print(a)

4.按一维数组指定

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

5.按二维数组指定

from numpy import *
import numpy as np
a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[1:,1:])
print(a[...,1:])
print(a[1,1])
print("*"*100)
print(a[1:3,0:2])
print(a[1:3,0:4:2])
print(a[0:4,2:3])

数组广播=运算

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。 
        如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

 1.一维对一维

from numpy import *
import numpy as np
a=np.array([1,2,3,4])
b=np.array([10,20,30,40])
c=a*b
print(c)

2.二维对二维

from numpy import *
import numpy as np
a=np.array([[0,0,0],
            [10,10,10],
            [20,20,20],
            [30,30,30]])
b=np.array([[1,2,3]])
bb=np.tile(b,(4,1))#重复b的各个维度
print(bb)
print(a+bb)

3.二维对一维

from numpy import *
import numpy as np
a=np.array([[0,0,0],
            [10,10,10],
            [20,20,20],
            [30,30,30]])
b=np.array([[1,2,3]])
print(b)

数组迭代

 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式。 
        迭代器最基本的任务的可以完成对数组元素的访问。

1.变形

from numpy import *
import numpy as np
a=np.arange(8)
print(a.reshape(2,4))

 2.迭代

from numpy import *
import numpy as np
a=np.arange(9).reshape(3,3)

3.不迭代,遍历

from numpy import *
import numpy as np
a=np.arange(8)
for i in a:
    print(i)

4.迭代

from numpy import *
import numpy as np
a=np.arange(8)
for i in a.flat:
    print(i)

5.迭代器

from numpy import *
import numpy as np
a=np.arange(8)
for i in np.nditer(a):
    print(i)

数组操作

1.拷贝数据,不影响原始数据

from numpy import *
import numpy as np
a=np.arange(8).reshape(2,4)
print(a)
print(a.flatten(order="C"))
print("*"*100)

2.展平数组元素

from numpy import *
import numpy as np
a=np.arange(4).reshape(2,2)
print(a.ravel(order="C"))
print("*"*100)

3.展平数组元素

from numpy import *
import numpy as np
a=np.arange(8).reshape(4,2)
print(a)
print(np.transpose(a))
print("*"*100,"对换数组维度")

4.扩展

from numpy import *
import numpy as np
a=np.arange(4).reshape(1,4)
b=np.broadcast_to(a,(4,4))
print(b)
print("*"*100)

5.连接数组

from numpy import *
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
print(np.concatenate((a,b),0))
print("*"*100)

6.分割数组

from numpy import *
import numpy as np
a=np.arange(9)
b=np.split(a,3)
print(b)
print("*"*100)

7.添加

from numpy import *
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
b=np.append(a,[7,8,9])
print(b.reshape(3,3))
print("*"*100)

8.删除

from numpy import *
import numpy as np
a=np.arange(12).reshape(3,4)
b=np.delete(a,5)
print(b)
b=np.delete(a,1,axis=1);
print(b)

函数 

函数描述
add()对两个数组的逐个字符串元素进行连接
multiply() 返回按元素多重连接后的字符串
center()居中字符串
capitalize() 将字符串第一个字母转换为大写
title()将字符串的每个单词的第一个字母转换为大写
lower()数组元素转换为小写
upper()数组元素转换为大写
split()指定分隔符对字符串进行分割,并返回数组列表
splitlines()  返回元素中的行列表,以换行符分割
strip() 移除元素开头或者结尾处的特定字符
join() 通过指定分隔符来连接数组中的元素
replace()使用新字符串替换字符串中的所有子字符串
decode()  数组元素依次调用str.decode
encode()数组元素依次调用str.encode

字符串函数

1.字符串连接

from numpy import *
import numpy as np
print(np.char.add(["hello"],["xyz"]))
print()
print(np.char.add(["hello","123"],["xyz","456"]))
print()

2.多重连接

from numpy import *
import numpy as np
print(np.char.multiply("abc",3))
print()

3.字符串居中

from numpy import *
import numpy as np
#(字符串,长度,填充字符)
print(np.char.center("by",20,fillchar="*"))
print()

4.首字母大写

from numpy import *
import numpy as np
print(np.char.capitalize("abc"))
print()

5.每个单词首字母大写

from numpy import *
import numpy as np
print(np.char.title("abc  def"))
print()

6.每个元素转小写

from numpy import *
import numpy as np
print(np.char.lower(['ABC','DEF']))
print()

7.每个元素转大写

from numpy import *
import numpy as np
print(np.char.upper(['aBC','dEF']))
print()

8.指定字符进行分割,返回数组

from numpy import *
import numpy as np
print(np.char.split("i like run?"))
print(np.char.split("wwww.baidu.com",sep='.'))
print()

9.换行符分割字符串,返回数组

from numpy import *
import numpy as np
print(np.char.splitlines("i\nlike\nrun?"))
print()

10.移除开头或者结尾指定字符

from numpy import *
import numpy as np
print(np.char.strip("1abc1111def1","1"))
print(np.char.strip(['aeee','awwww'],'a'))
print()

11.连接插入指定字符

from numpy import *
import numpy as np
print(np.char.join([":","_"],["abcd","123"]))

12.替换字符串所有字符串

from numpy import *
import numpy as np
print(np.char.replace("i like runoob ","oo","cc"))

13.对字符串进行编码

from numpy import *
import numpy as np
#默认编码utf-8
a=np.char.encode("abc","cp500")
print(a)

14.编码进行解码

from numpy import *
import numpy as np
a=np.char.encode("abc","cp500")
print(np.char.decode(a,"cp500"))
print()

 数学函数

1.返回最大整数,取向下取整

from numpy import *
import numpy as np
a=np.array([-1.4,1.5,11,33])
print(np.floor(a))
print()

 2.返回最小整数,取向下取整

from numpy import *
import numpy as np
a=np.array([-1.4,1.5,11,33])
print(np.floor(a))
print()

3.numpy算数函数

 

from numpy import *
import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
print ('第一个数组:')
print (a)
print ('\n')
print ('第二个数组:')
b = np.array([10,10,10])
print (b)
print ('\n')
print ('两个数组相加:')
print (np.add(a,b))
print ('\n')
print ('两个数组相减:')
print (np.subtract(a,b))
print ('\n')
print ('两个数组相乘:')
print (np.multiply(a,b))
print ('\n')
print ('两个数组相除:')
print (np.divide(a,b))

统计函数

1.numpy统计函数

from numpy import *
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 amin() 函数:')
print (np.amin(a,1))
print ('\n')
print ('再次调用 amin() 函数:')
print (np.amin(a,0))
print ('\n')
print ('调用 amax() 函数:')
print (np.amax(a))
print ('\n')
print ('再次调用 amax() 函数:')
print (np.amax(a, axis =  0))

2.函数计算数组中元素最大值与最小值的差(最大值 - 最小值)。

from numpy import *
import numpy as np
a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 ptp() 函数:')
print (np.ptp(a))
print ('\n')
print ('沿轴 1 调用 ptp() 函数:')
print (np.ptp(a, axis =  1))
print ('\n')
print ('沿轴 0 调用 ptp() 函数:')
print (np.ptp(a, axis =  0))

 3.函数返回输入数组的排序副本。函数格式如下

from numpy import *
import numpy as np
a = np.array([[3,7],[9,1]])
print ('我们的数组是:')
print (a)
print ('\n')
print ('调用 sort() 函数:')
print (np.sort(a))
print ('\n')
print ('按列排序:')
print (np.sort(a, axis =  0))
print ('\n')

 排序函数

1.在sort函数中排序字段

from numpy import *
import numpy as np
dt = np.dtype([('name',  'S10'),('age',  int)])
a = np.array([("raju",21),("anil",25),("ravi",  17),  ("amar",27)], dtype = dt)
print ('我们的数组是:')
print (a)
print ('\n')
print ('按 name 排序:')
print (np.sort(a, order =  'name'))

2.函数返回的是数组值从小到大的索引值。 

from numpy import *
import numpy as np
x = np.array([3,  1,  2])
print ('我们的数组是:')
print (x)
print ('\n')
print ('对 x 调用 argsort() 函数:')
y = np.argsort(x)
print (y)
print ('\n')
print ('以排序后的顺序重构原数组:')
print (x[y])
print ('\n')
print ('使用循环重构原数组:')
for i in y:
    print (x[i], end=" ")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值