pythonnumpy模块_python之numpy模块

NumPy 最重要的一个特点是其 N 维数组对象 ndarray。

np中的array()函数用于创建数组对象ndarray:

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

参数说明:

名称描述

object

数组或嵌套的数列

dtype

数组元素的数据类型,可选

copy

对象是否需要复制,可选

order

创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)

subok

默认返回一个与基类类型一致的数组

ndmin

指定生成数组的最小维度

1 >>> a = array([[1,2,3]],dtype = str) #dtype属性用于指定数组中元素的数据类型

2 >>>a3 array([['1', '2', '3']], dtype='

1 >>> a = array([1,2,3],ndmin = 3) #ndmin指定数组的维度,

2 >>>a3 array([[[1, 2, 3]]])4 >>> a.shape #ndmin指定数组为3维的数组

5 (1, 1, 3)

数据类型对象

dtype对象用于构造数据类型,dtype 对象是使用以下语法构造的:

numpy.dtype(object,align,copy)

object - 要转换为的数据类型对象

align - 如果为 true,填充字段使其类似 C 的结构体。

copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

1 >>> dt = dtype([('age',int8)]) #自建结构化的数据类型

2 >>>dt3 dtype([('age', 'i1')])#

1 >>> student = dtype([('name','S20'),('age','i1'),('marks','f4')]) #创建学生数据类型

2 >>>student3 dtype([('name', 'S20'), ('age', 'i1'), ('marks', '>> a = array([[('louis',3,2.0),('bob',1,1.0)],[('mary',2,2.0),('jeff',8,8.0)]])5 >>>a6 array([[['louis', '3', '2.0'],7 ['bob', '1', '1.0']],8

9 [['mary', '2', '2.0'],10 ['jeff', '8', '8.0']]], dtype='>>a.shape12 (2, 2, 3)

numpy数组属性

属性说明

ndarray.ndim

秩,即轴的数量或维度的数量

ndarray.shape

数组的维度,对于矩阵,n 行 m 列

ndarray.size

数组元素的总个数,相当于 .shape 中 n*m 的值

ndarray.dtype

ndarray 对象的元素类型

ndarray.itemsize

ndarray 对象中每个元素的大小,以字节为单位

ndarray.flags

ndarray 对象的内存信息

ndarray.real

ndarray元素的实部

ndarray.imag

ndarray 元素的虚部

ndarray.data

包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

1 >>> b = arange(9) #arange()函数创建一个一维数组

2 >>>b3 array([0, 1, 2, 3, 4, 5, 6, 7, 8])4 >>> c = b.reshape(1,3,3) #reshape()重新指定数组的维度

5 >>>c6 array([[[0, 1, 2],7 [3, 4, 5],8 [6, 7, 8]]])9 >>> c.shape #shape属性指定数组维度

10 (1, 3, 3)11 >>> c.ndim #ndim属性指定数组维数

12 3

创建数组的三个函数

numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:

numpy.empty(shape,dtype =float,order ='C')

参数描述

shape

数组形状

dtype

数据类型,可选

order

有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

>>> d = empty((3,3),dtype =float)>>>d

array([[2.94873482e-300, -1.51146234e-311, 2.92109692e-300],

[9.79258397e-292, 2.92138172e-300, 4.86951257e-300],

[5.62191079e-300, 5.55218946e-300, 2.43312694e-290]])#empty()函数生成的数组的元素是随机的,因为他们并没有初始化

numpy.zeros

创建指定大小的数组,数组元素以 0 来填充:

numpy.zeros(shape,dtype =float,order ='C')

参数说明:

参数描述

shape

数组形状

dtype

数据类型,可选

order

'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

1 >>> d = zeros((3,3),dtype =int)2 >>>d3 array([[0, 0, 0],4 [0, 0, 0],5 [0, 0, 0]])

numpy.ones

创建指定形状的数组,数组元素以 1 来填充:

numpy.ones(shape,dtype =None,order ='C')

参数说明:

参数描述

shape

数组形状

dtype

数据类型,可选

order

'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

1 >>> d = ones((3,3),dtype =int)2 >>>d3 array([[1, 1, 1],4 [1, 1, 1],5 [1, 1, 1]])

从已有数组创建数组

numpy.asarray

numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

numpy.asarray(a,dtype =None,order =None)

参数说明:

参数描述

a

任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组

dtype

数据类型,可选

order

可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。

>>> a = zeros((1,3)) #创建一个数据类型为float的数组

>>>a

array([[0., 0., 0.]])>>> e = ['你好','再见','滚蛋'] #>>>e

['你好', '再见', '滚蛋']>>> a[0,:] = e[:] #如果用索引和切片将字符串列表赋值给数组将会发生异常

Traceback (most recent call last):

File"", line 1, in a[0,:]=e[:]

ValueError: couldnot convert string to float: '你好'

>>> a = asarray(e) #通过asarray(e)函数可以将不同数据类型的元素赋值给数组

>>>a

array(['你好', '再见', '滚蛋'], dtype='

numpy.fromiter

numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。

numpy.fromiter(iterable,dtype,count=-1)

参数描述

iterable

可迭代对象

dtype

返回数组的数据类型

count

读取的数据数量,默认为-1,读取所有数据

1 >>> f = [1,2,3]2 >>>f3 [1, 2, 3]4 >>>b5 array([0, 1, 2, 3, 4, 5, 6, 7, 8])6 >>> b = fromiter(f,dtype=int)7 >>>b8 array([1, 2, 3])9 >>> b = fromiter(f,dtype=int,count=2)10 >>>b11 array([1, 2])

从数值范围创建数组

numpy.arange

numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

numpy.arange(start,stop,step,dtype)

根据 start 与 stop 指定的范围以及 step 设定的步长,生成一个 ndarray。

参数说明:

参数描述

start

起始值,默认为0

stop

终止值(不包含)

step

步长,默认为1

dtype

返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。

>>> a = arange(3,9,2) #从3-9之间生成元素,元素之间相差2

>>>a

array([3, 5, 7])

numpy.linspace

numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

参数说明:

参数描述

start

序列的起始值

stop

序列的终止值,如果endpoint为true,该值包含于数列中

num

要生成的等步长的样本数量,默认为50

endpoint

该值为 true 时,数列中包含stop值,反之不包含,默认是True。

retstep

如果为 True 时,生成的数组中会显示间距,反之不显示。

dtype

ndarray 的数据类型

1 >>> a = linspace(0,49)2 >>>a3 array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.,4 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24., 25.,5 26., 27., 28., 29., 30., 31., 32., 33., 34., 35., 36., 37., 38.,6 39., 40., 41., 42., 43., 44., 45., 46., 47., 48., 49.])7 >>> a = linspace(0,51,retstep=True)8 >>>a9 (array([ 0. , 1.04081633, 2.08163265, 3.12244898, 4.16326531,10 5.20408163, 6.24489796, 7.28571429, 8.32653061, 9.36734694,11 10.40816327, 11.44897959, 12.48979592, 13.53061224, 14.57142857,12 15.6122449 , 16.65306122, 17.69387755, 18.73469388, 19.7755102,13 20.81632653, 21.85714286, 22.89795918, 23.93877551, 24.97959184,14 26.02040816, 27.06122449, 28.10204082, 29.14285714, 30.18367347,15 31.2244898 , 32.26530612, 33.30612245, 34.34693878, 35.3877551,16 36.42857143, 37.46938776, 38.51020408, 39.55102041, 40.59183673,17 41.63265306, 42.67346939, 43.71428571, 44.75510204, 45.79591837,18 46.83673469, 47.87755102, 48.91836735, 49.95918367, 51. ]), 1.0408163265306123)

numpy.logspace

numpy.logspace 函数用于创建一个于等比数列。格式如下:

np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)

base 参数意思是取对数的时候 log 的下标。

参数描述

start

序列的起始值为:base ** start

stop

序列的终止值为:base ** stop。如果endpoint为true,该值包含于数列中

num

要生成的等步长的样本数量,默认为50

endpoint

该值为 true 时,数列中中包含stop值,反之不包含,默认是True。

base

对数 log 的底数。

dtype

ndarray 的数据类型

1 >>> a = logspace(2,6,base = 2,num = 2)2 >>>a3 array([ 4., 64.])

numpy切片和索引

1 >>> a = array([[1,2,3],[3,4,5],[4,5,6]])2 >>>a3 array([[1, 2, 3],4 [3, 4, 5],5 [4, 5, 6]])6 >>> a[,1]7 SyntaxError: invalid syntax8 >>> a[...,1] #从每一行中选择第二个元素9 array([2, 4, 5])10 >>> a[1,...]11 array([3, 4, 5]) #选择第二行的所有元素12 >>> a[...,1:] #从每一行选择第二个之后的所有元素13 array([[2, 3],14 [4, 5],15 [5, 6]])16 >>> a[2][2]17 6#

布尔索引

>>> a = array([[1,2,3],[3,4,5],[4,5,6]])>>>a

array([[1, 2, 3],

[3, 4, 5],

[4, 5, 6]])>>> a[a>3] #选择数组中大于3的元素,返回一维数组

array([4, 5, 4, 5, 6])

numpy广播broadcast

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。

1 >>> b = array([3,2,1])2 >>>b3 array([3, 2, 1])4 >>> b1 = array([1,2,3])5 >>> b +b16 array([4, 4, 4])

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制。

1 >>> a +b12 array([[2, 4, 6],3 [4, 6, 8],4 [5, 7, 9]])

numpy迭代数组

>>>a

array([[1, 2, 3],

[3, 4, 5],

[4, 5, 6]])>>> for x in nditer(a,order='F'): #按列访问

print(x,end=' ')1 3 4 2 4 5 3 5 6

>>> for x in nditer(a,order='C'): #按行访问,默认按行访问

print(x,end=' ')1 2 3 3 4 5 4 5 6

>>> for x in nditer(a.T): #a的转置矩阵,访问顺序和a一样,说明他在内存中存储顺序和a一样

print(x,end=' ')1 2 3 3 4 5 4 5 6

修改数组元素中的值

nditer 对象有另一个可选参数 op_flags。 默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。

>>>a

array([[1, 2, 3],

[3, 4, 5],

[4, 5, 6]])>>> for x in nditer(a.T): #这种方式只是修改了迭代的值,但是并没有改变原数组

x = x+1

print(x,end=' ')2 3 4 4 5 6 5 6 7

>>>a

array([[1, 2, 3],

[3, 4, 5],

[4, 5, 6]])>>> for x in nditer(a.T,op_flags=['readwrite']): #数组元素同时也改变了

x[...] = x + 1

print(x,end=' ')2 3 4 4 5 6 5 6 7

>>>a

array([[2, 3, 4],

[4, 5, 6],

[5, 6, 7]])

nditer类的构造器拥有flags参数,它可以接受下列值:

参数描述

c_index

可以跟踪 C 顺序的索引

f_index

可以跟踪 Fortran 顺序的索引

multi-index

每次迭代可以跟踪一种索引类型

external_loop

给出的值是具有多个值的一维数组,而不是零维数组

如果直接使用数组名做迭代对象,则每次访问的是“一行”

1 >>> for i ina:2 print(i)3

4

5 [2 3 4]6 [4 5 6]7 [5 6 7]

广播迭代

如果两个数组是可广播的,nditer 组合对象能够同时迭代它们。 假设数组 a 的维度为 3X4,数组 b 的维度为 1X4 ,则使用以下迭代器(数组 b 被广播到 a 的大小)。

importnumpy as np

a= np.arange(0,60,5)

a= a.reshape(3,4)print ('第一个数组为:')print(a)print ('\n')print ('第二个数组为:')

b= np.array([1, 2, 3, 4], dtype =int)print(b)print ('\n')print ('修改后的数组为:')for x,y innp.nditer([a,b]):print ("%d:%d" % (x,y), end=",")

第一个数组为:

[[ 05 10 15]

[20 25 30 35]

[40 45 50 55]]

第二个数组为:

[1 2 3 4]

修改后的数组为:

0:1, 5:2, 10:3, 15:4, 20:1, 25:2, 30:3, 35:4, 40:1, 45:2, 50:3, 55:4,

numpy数组操作

修改数组形状

numpy.reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')

arr:要修改形状的数组

newshape:整数或者整数数组,新的形状应当兼容原有形状

order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序

1 >>>b2 array([[2, 3, 4],3 [4, 5, 6],4 [5, 6, 7]])5 >>>b.shape6 (3, 3)7 >>> b.reshape((1,9)) #重塑数组维度为1,9

8 array([[2, 3, 4, 4, 5, 6, 5, 6, 7]])9 >>>b.shape10 (1,9)

numpy字符串操作

函数描述

add()

对两个数组的逐个字符串元素进行连接

multiply()

返回按元素多重连接后的字符串

center()

居中字符串

capitalize()

将字符串第一个字母转换为大写

title()

将字符串的每个单词的第一个字母转换为大写

lower()

数组元素转换为小写

upper()

数组元素转换为大写

split()

指定分隔符对字符串进行分割,并返回数组列表

splitlines()

返回元素中的行列表,以换行符分割

strip()

移除元素开头或者结尾处的特定字符

join()

通过指定分隔符来连接数组中的元素

replace()

使用新字符串替换字符串中的所有子字符串

decode()

数组元素依次调用str.decode

encode()

数组元素依次调用str.encode

numpy.char.add()

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

>>>s1

array(['a', 'b', 'c'], dtype='>> s2 =s1>>>s2

array(['a', 'b', 'c'], dtype='>>char.add(s1,s2)

array(['aa', 'bb', 'cc'], dtype='>> s3 =char.add(s1,s2)>>>s3

array(['aa', 'bb', 'cc'], dtype='>>char.add(s3,s3)

array(['aaaa', 'bbbb', 'cccc'], dtype='>> s4 = tile(s1,(3,1))>>>s4

array([['a', 'b', 'c'],

['a', 'b', 'c'],

['a', 'b', 'c']], dtype='>> char.add(s1,s4) #数组字符串连接的时候适用广播准则

array([['aa', 'bb', 'cc'],

['aa', 'bb', 'cc'],

['aa', 'bb', 'cc']], dtype='

numpy.char.multiply()

numpy.char.multiply() 函数执行多重连接。

1 >>>s12 array(['a', 'b', 'c'], dtype='>> char.multiply(s1,3)4 array(['aaa', 'bbb', 'ccc'], dtype='

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值