首页 > 其他分享 >Numpy

Numpy

时间:2022-10-27 23:47:41浏览次数:46  
标签:10 函数 元素 数组 np array Numpy

ndarray对象基本应用

  • 标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。对于数值运算来说,这种结构显然比较浪费内存和CPU计算。
  • Python 提供了array 模块,它和列表不同,能直接保存数值,但是由于它不支持多维数组,无各种运算函数,因此也不适合做数值运算。
  • NumPy 的诞生弥补了这些不足,NumPy 提供了两种基本的对象:ndarray(n-dimensional array object)和ufunc(universal function object)。
  • ndarray是存储单一数据类型的多维数组,ndarray 中的每个元素在内存中都有相同存储大小的区域。而ufunc 则是能够对数组进行处理的函数。
 1 #NumPy生成数组时一般会有一个参数dtype,它的默认值一般为float浮点型。
 2 np.array([1, 2, 3, 4])
 3 np.arange(0, 1, 0.1)
 4 np.random.randint(0,10,size=(4,5))
 5 # logspace函数和linspace类似,创建等比数列。
 6 #下面的例子产生1(10^0)到100(10^2)、有20个元素的等比数列
 7 np.logspace(0, 2, 20)
 8 
 9 np.empty((2,3),np.int) #只分配内存,不对其进行初始化
10 # array([[ 32571594, 32635312, 505219724],
11 # [ 45001384, 1852386928, 665972]])
12 
13 np.zeros(4, np.float) #元素类型默认为np.float,因此这里可以省略
14 #array([ 0., 0., 0., 0.])
15 
16 # 使用frombuffer, fromstring, fromfile,fromfunction等函数可以从字节序列、文件创建数组。下面以fromfunction为例:
17 #fromfunction函数的第一个参数为计算每个数组元素的函数,第二个参数为数组的大小(shape)。
18 def func(i):
19     return i%4+1
20 np.fromfunction(func, (10,))
21 # array([ 1., 2., 3., 4., 1., 2., 3., 4., 1., 2.])
22 
23 # 下面的例子创建一个二维数组表示九九乘法表,输出的数组a中的每个元素a[i, j]都等于func2(i, j):
24 def func2(i, j):
25     return (i+1) * ( j+1)
26 a = np.fromfunction(func2, (9,9))
27 # a = array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.],
28 # [ 2., 4., 6., 8., 10., 12., 14., 16., 18.],
29 # [ 3., 6., 9., 12., 15., 18., 21., 24., 27.],
30 # [ 4., 8., 12., 16., 20., 24., 28., 32., 36.],
31 # [ 5., 10., 15., 20., 25., 30., 35., 40., 45.],
32 # [ 6., 12., 18., 24., 30., 36., 42., 48., 54.],
33 # [ 7., 14., 21., 28., 35., 42., 49., 56., 63.],
34 # [ 8., 16., 24., 32., 40., 48., 56., 64., 72.],
35 #[ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
36 
37 #shape与reshape
38 #可以通过修改数组的shape属性,在保持数组元素个数不变的情况下,改变数组每个轴的长度。
39 a = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
40 a.shape=4,3
41 #a = array([[ 1,  2,  3],[ 4,  4,  5],[ 6,  7,  7],[ 8,  9, 10]])
42 a.shape = 2,-1 #当某个轴的元素为-1时,将根据数组元素的个数自动计算此轴的长度,因此下面的程序将数组c的
43 d = a.reshape((2,2)) #使用数组的reshape方法,可以创建一个改变了尺寸的新数组,原数组的shape保持不变.
44 #!!!但是数组a和d其实共享数据存储内存区域,因此修改其中任意一个数组的元素都会同时修改另外一个数组。

astype:astype转换数组对象的类型,会创建一个新的数组,相当于原始数据的复制

Numpy对象的属性

  • ndims属性:用于返回秩,即数组的维数。
  • shape属性:以 tuple表示的数组形狀,描述了数组对象各个维度的长度。
  • size属性:用以查看数组元素总数。
  • itemsize属性:以字节为单位,表示返回数组中每一个元素的大小。
  • flags属性:表示返回的是对象的内存信息,比如ndarry数组的存储方式,以及是否是其它数组的副本等

与列表通过切片获取的新的数组是原始数组的一个复制,不能通过切片的返回结果来改变原有数组。

对切片表达式的赋值操作将会被扩散到整个选择对区域。

 

 布尔型索引(很6)

通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

 1 arr = np.arange(12) .reshape(4,3)
 2 ##array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
 3 ##计算arr中大于5的数
 4 print(arr>5)
 5 ## [[False False False] [False False False] [ True True True]
 6 ## [ True True True]]
 7 print(arr[arr>5])
 8 ## [ 6 7 8 9 10 11]
 9 ##计算arr中不等于5的数
10 print(arr[arr!=5])
11 ## [ 0 1 2 3 4 6 7 8 9 10 11]

切片索引和花式索引

a = np.arange(9,1,-1)
b = a[2:5]

c = a[[1,5,3]]
#一次传入多个索引数组,返回的将是一个一维数组。要想选取的矩阵行列的子集是矩形区域的形式,就要使用np.ix_函数,应用ix_函数实现箱卡儿积的映射关系。
arr = np.arange(32) .reshape(8,4)
brr = arr[np.ix_([1,5,7,2],[0,3,1,2])]
#np.ix_函数将数组[1,5,7,2]和数组[0,3,1,2] 产生笛卡儿积,得到如下数据:
#(1,0),(1,3),(1,1),(1,2),
#(9,0),(5,3),(5,1),(5,2),
#(7,0),(7,3),(7,1),(7,2),
#(2,0),(2,3),(2,1),(2,2)

 

内置函数

  NumPy对象中常见函数有字符串函数、统计函数、数学函数、算数函数、排序及筛选函数等

字符串函数____numpy.char.函数名()

  add()函数依次对两个数组的元素进行字符串连接

1 np.char.add(['hello'],['world'])
2 # array(['helloworld'], dtype='<U10')
3 np.char.add(['hello','ab'],['world','cd'])
4 # array(['helloworld', 'abcd'], dtype='<U10')

  multiply()函数返回按元素多重连接后的字符串

  center()函数可以将字符串居中,并使用指定字符填充在字符串两侧

1 np.char.multiply('Hi',5)
2 # array('HiHiHiHiHi', dtype='<U10')
3 np.char.center('Hi',10,fillchar='-')
4 # array('----Hi----', dtype='<U10')

capitalize()函数将字符串的第一个字母转换为大写

title()函数将字符串每个单词的第一个字母转换为大写

lower()函数将数组中的每个元素转换为小写

upper()函数将数组中的每个元素转换为大写

split()函数对字符串进行分隔并返回数组,可以指定分隔符进行分隔,默认情况下的分隔符为空格

splitlines()函数与split()相似,不同的是以换行符作为分隔符来分隔字符串,并返回数组,\n、\r、\r\n都可用作分隔符

strip()函数用于移除开头或结尾处的特定字符

join()函数通过指定分隔符来连接数组中的元素或字符串

replace()函数将使用新字符串替换原字符串中的所有子字符串

encode()函数对数组中的每个元素调用进行编码。默认为utf-8

decode()函数对编码的元素进行解码

 1 print(np.char.capitalize('i love you'))
 2 print(np.char.title('i love you'))
 3 print(np.char.upper('i love you'))
 4 '''
 5 I love you
 6 I Love You
 7 I LOVE YOU
 8 '''
 9 print(np.char.strip('i love you','i'))
10 print(np.char.join(':','love'))
11 print(np.char.replace('aabbccdd','cc','pp'))
12 '''
13  love you   #这里空格还保留着
14 l:o:v:e
15 aabbppdd
16 '''
17 arr = np.char.encode('love','cp500')
18 print(arr)
19 print(np.char.decode(arr,'cp500'))
20 '''
21 b'\x93\x96\xa5\x85'
22 love
23 '''

 

统计函数

  NumPy 有很多非常实用的统计函数,用于从数组给定的元素中按照指定轴查找平均数、最小值、最大值、百分标准差和方差等。

求和函数

  sum()计算数组元素之和,也可以对列表、元组等和数组类似的序列进行求和。当数组是多维时,它计算数组中所有元素的和。

 

1 a =np.random.randint(0,10,size=(4,5))
2 '''
3 array([[7, 1, 9, 6, 3],
4 [5, 1, 3, 8, 2],
5 [9, 8, 9, 4, 0],
6 [9, 5, 1, 7, 0]])
7 '''
8 np.sum(a)
9 # 97

  如果指定axis参数,求和运算将沿着指定的轴进行。在上面的例子中,数组a的第0轴(列)长度为4, 第1轴(行)长度为5。如果axis参数为1,就对每行上的5个数求和,所得的结
果是长度为 4的一维数组。如果参数axis为0,就对每列上的4个数求和,结果是长度为5的一维数组。 即结果数组的形状是原始数组的形状除去其第axis个元素。

 

1 np.sum(a,axis=1)
2 # array([26, 19, 30, 22])
3 np.sum(a, axis=0)
4 # array([30, 15, 22, 25, 5])

 

 

  • sum()默认使用和数组的元素类型相同的累加变量进行计算,如果元素类型为整数,就使 用系统的默认整数类型作为累加变量。
  • 在32位系统中,累加变量的类型为32 bit整型。整数累加时,存在溢出问题,即数组元素的总和超过了累加变量的取值范围。
  • 很大单精度浮点数类型累加时,存在精度不够的问题。可以通过dtype 参数指定累加变量的类型解决。

 

平均值

  mean()用于求数组的平均值(期望),也可以通过axis参数指定求平均值的轴,通过out参数指定输出数组。和sum()不同的是,对于整数数组,它使用双精度浮点数进行计算。其他类型的数组,则使用和数组元素类型相同的累加变量进行计算。

1 np.mean(a,axis=1) #整数数组使用双精度浮点数进行计算
2 # array([ 5.2,3.8,6. , 4.4])
3 np.mean(b) #单精度浮点数使用单精度浮点数进行计算
4 # 1.1109205
5 np.mean(b, dtype=np.double) #用双稍度浮点数计算平均值
6 # 1.1000000238418579

  np.average(X, axis=0,weights=w)(加权平均值)也可以对数组进行平均计算。无out和dtype参数,但有一个指定每个元素权值的weights参数。

 

1 X = np.array([[.9, .1],[.8, .2],[.4, .6]])
2 w = np.array([.2, .2, .6])
3 print(w.dot(X))
4 print(np.average(X, axis=0, weights=w))

最值

  min()和max() 计算数组的最大值和最小值。
  ptp()计算最大值和最小值之间的差。
  它们都有axis和out两个参数。这些参数的用法和sum()相同。
  argmax()和argmin()求最大值和最小值的下标。如果不指定axis参数,就返回平坦化之后的数组下标。

 1 np.min(a2)
 2 # 1.0
 3 np.max(a2)
 4 # 9.0
 5 np.ptp(a2)
 6 # 8.0
 7 np.argmax(a) #找到数组a中最大值的下标,有多个最值时得到第一个最值的下标
 8 # 2
 9 a.ravel()[2] #求平坦化之后的数组中的第二个元素
10 # 9

  axis参数表示沿着指定的轴计算最大值的下标。下面的结果表示,在数组 a中,第0行中最大值的下标为2,第1行中最大值的下标为3下面的语句,并使用idx选择出每行的最大值:

1 idx = np.argmax(a, axis=1)
2 # array([2, 3, 0, 0])
3 a[xrange(a.shape[0]),idx]
4 # array([9, 8, 9, 9])

 

  argsort()返回数组的排序下标,axis参数的默认值为-1。

 

1 idx = np.argsort(a)
2 '''
3 array([[1, 4, 3, 0, 2],
4 [1, 4, 2, 0, 3],
5 [4, 3, 1, 0, 2],
6 [4, 2, 1, 3, 0]])
7 '''

-------------待补充,P66-----------------

 

标签:10,函数,元素,数组,np,array,Numpy
From: https://www.cnblogs.com/silvia-cloud2/p/16833298.html

相关文章

  • 用numpy实现最简单的前馈神经网络——正向网络建立篇
    目录mnist分析(输入分析)下载简要说明加载显示输出分析拟合函数建立激活函数拟合函数正向计算梯度梯度下降最终代码根据上一篇文章,来构建神经网络吧明确输入和输出选择合......
  • 用numpy实现最简单的前馈神经网络——神经网络架构篇
    目录神经网络架构矩阵运算拟合——深度学习的目的最简单的拟合——线性回归深度学习中的拟合平均损失最小——梯度下降法反向传播和链式法则激活函数和损失函数的选择总结......
  • Numpy温习函数方法
    一、NumpyPandas1.1简介方便数组矩阵运算1.2优势运算速度快:numpy和pandas都是采用C语言编写,pandas又是基于numpy,是numpy的升级版本。消耗资源少:采用的是......
  • python numpy 基础科学计算包,数学函数库
    pipinstallnumpynumpy.array()函数,强大的N维数组对象ndarrayimportnumpyasnpa=np.array([1,2,3])print(a)[123]#多于一个维度importnumpyasnpa......
  • 【Python数据分析】数据的维度、Numpy
    数据的维度一维数据一维数据由对等关系的有序或无序数据构成,采用线性方式组织列表和数组二维数据是由多个一维数据组成,是一维数据的组合形式多维数据由一维或二维数......
  • Python中的矩阵——NumPy包
    Part1安装NumPy包,以VScode为例:打开VisualStudioCode,选取任一python项目文件,运行该文件,在终端(Terminal)中输入cd+空格+Python安装目录下Scripts文件的路径,例如我......
  • 记一次numpy数据读取问题
    问题使用numpy保存npy文件后在C++中读取使用shape正确值始终对不上分析C++中使用cnpy进行文件读取,设置数据类型为float32Python中使用list对数据进行保存,没有指定数据......
  • python中numpy切片问题
    方式1:逗号前表示行,冒号表示从该行的第几个到第几个(包含头不包含尾)方式2:逗号在后,表示列,冒号表示从该列的第几个到第几个(包含头不包含尾)......
  • numpy的通用函数ufunc
    参考:《利用python进行数据分析-第一版》......
  • python数据分析基础004 -numpy读取数据以及切片,索引的使用
    ......