python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

本文介绍了Python数据分析库Numpy的基础知识,包括ndarry对象的创建、数组与标量的运算、索引和切片、数组操作函数、线性代数和随机数生成等功能,展示了如何进行快速的数值计算和高效的数据处理。
摘要由CSDN通过智能技术生成

利用Python进行数据分析——Numpy基础:数组和矢量计算

ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组

对整组数据进行快速运算的标准数学函数,无需for—loop

用于读写磁盘数据的工具以及用于操作内存映射文件的工具?

线性代数、随机数生成以及傅里叶变换功能

用于集成C/C++等代码的工具

一、ndarry:一种多维数组对象

1、创建ndarry

#一维

In [5]: data = [1,2,3]

In [6]: import numpy as np

In [7]: arr1 = np.array(data)

In [8]: arr1

Out[8]: array([1, 2, 3])

#二维

In [11]: data2 = [[1,2,3],[4,5,6]]

In [12]: arr2 = np.array(data2)

In [13]: arr2

Out[13]:

array([[1, 2, 3],

[4, 5, 6]])

#查看数组的信息

In [15]: arr2.shape

Out[15]: (2, 3)

In [16]: arr2.dtype

Out[16]: dtype('int32')

数组创建函数

array()

arange(),类似Python内置函数range(),但是range()返回的是列表

ones,zeros 创建一个全为1/0的数组,但是传进去的参数要是一个集合,例如np.ones((2,3))

ones_like,zeros_like 创建一个跟传进去数组形状一样的全1/0数组

empty,empty_like 创建空的数组,分配内存,不存值

eye,identity 创建方阵

2.数组和标量之间的运算

In [36]: arr2

Out[36]:

array([[1, 2, 3],

[4, 5, 6]])

In [37]: arr3

Out[37]:

array([[11, 12, 13],

[14, 15, 16]])

#加

In [38]: arr2+arr3

Out[38]:

array([[12, 14, 16],

[18, 20, 22]])

#乘

In [39]: arr2*arr3

Out[39]:

array([[11, 24, 39],

[56, 75, 96]])

#减

In [40]: arr3-arr2

Out[40]:

array([[10, 10, 10],

[10, 10, 10]])

#除

In [41]: arr3/arr2

Out[41]:

array([[11. , 6. , 4.33333333],

[ 3.5 , 3. , 2.66666667]])

#平方

In [42]: arr2**2

Out[42]:

array([[ 1, 4, 9],

[16, 25, 36]], dtype=int32)

3.索引和切片

索引:

arr2d[0,0]或者是arr2d[0][0]

arr3d[0,0,0]或者是arr3d[0][0][0]

切片:有:标记

arr2d[:2,:2]

arr3d[:2,:2]

先区分数组和列表的操作

数组的切片是在原始数组上进行的,而列表的切片操作则是进行了数据的赋值

如果需要切片的是一份副本而不是源数组本身,需要arr[5:8].copy()

#列表的切片

>>> l1 = list(range(10))

>>> l1

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> l2 = l1[5:8]

>>> l2

[5, 6, 7]

>>> l2[0]=15

>>> l2

[15, 6, 7]

>>> l1

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

#数组的切片

In [50]: arr = np.arange(10)

In [51]: arr

Out[51]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [52]: arr_slice = arr[5:8]

In [53]: arr_slice

Out[53]: array([5, 6, 7])

In [54]: arr_slice[0]=15

In [55]: arr_slice

Out[55]: array([15, 6, 7])

In [56]: arr

Out[56]: array([ 0, 1, 2, 3, 4, 15, 6, 7, 8, 9])

#二维数组的切片

In [95]: arr2d

Out[95]:

array([[1, 2, 3],

[4, 5, 6],

[7, 8, 9]])

In [96]: arr2d[:2]

Out[96]:

array([[1, 2, 3],

[4, 5, 6]])

一次可以传入多个切片

In [97]: arr2d[:2,:1]

Out[97]:

array([[1],

[4]])

In [98]: arr2d[:2,:2]

Out[98]:

array([[1, 2],

#3维

In [83]: arr3d

Out[83]: [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]

In [84]: arr3d[1]

Out[84]: [[7, 8, 9], [10, 11, 12]]

In [85]: arr3d[1][1]

Out[85]: [10, 11, 12]

In [86]: arr3d[1][1][1]

Out[86]: 11

In [87]: arr3d[1][1][2]

Out[87]: 12

布尔型索引

#[True,False,True]就相当有是取第0/2行

In [121]: arr2d[[True,False,True]]

Out[121]:

array([[1, 2, 3],

[7, 8, 9]])

In [122]: arr2d[[True,False,True],2]

Out[122]: array([3, 9])

花式索引

#与上边的博布尔型索引一样,也是取第0/2行

In [132]: arr2d[[0,2]]

Out[132]:

array([[1, 2, 3],

[7, 8, 9]])

#花式索引注意以下问题

花式索引跟切片不同,总是将数据复制到新数组中,所以造成以下现象

In [136]: arr2d[[0,2],[0,2]]

Out[136]: array([1, 9])

In [137]: arr2d[[0,2]][:,[0,2]]

Out[137]:

array([[1, 3],

[7, 9]])

数组转置和轴对换

转置是重塑的一种特殊形式,它返回的是源数据的视图,不会进行复制操作。

In [142]: arr2d.T

Out[142]:

array([[1, 4, 7],

[2, 5, 8],

[3, 6, 9]])

4.对数组的元素进行操作的函数

对单个数组元素的操作函数

abs 计算绝对值

sqrt 计算各元素的平方根

square 计算各元素的平方

exp 计算各元素的以e为底的指数

log/log10/log2/log1p log1p是log(1+x)

sign 计算各元素的正负号

ceil 计算大于等于该元素的最小整数

floor 计算小于等于该元素的最大整数

rint 将该元素四舍五入到最接近的整数

modf 返回该元素的小数和整数部分,以两个独立数组的形式

isnan is not a number 判断各元素是否是数字

isfinite isinf 判断各元素有穷无穷

cos/sin/tan

arccos/acccosh/arcsin

对两个数组元素操作的函数

add 将数组中元素相加

subtract 第一个数组中元素减去第二个数组中元素

multiply 数组对应元素相乘

divide floor_divide 除法、丢弃余数的除法

power(a,b) 将a中元素计算b中对应元素 a的b次方

mod 求除法的余数

copysign 将第二个数组中的元素符号赋值给第一个数组中的值

< >= <= == != 比较对应元素的值

logical_and/logical_or/logical_xor

5.一些可以用数组来处理的运算

矢量化方便运算

三元运算

In [6]: xarr = np.array([1.1,1.2,1.3,1.4,1.5])

In [7]: yarr = np.array([2.1,2.2,2.3,2.4,2.5])

In [8]: cond = np.array([True,False,True,True,False])

In [9]: result = [x if c else y for x ,c ,y in zip(xarr,yarr,cond)]

In [10]: result

Out[10]: [1.1, 1.2, 1.3, 1.4, 1.5]

np.where通常用于根据一个数组生成另外一个数组

In [11]: result2 = np.where(cond,xarr,yarr)

In [12]: result2

Out[12]: array([1.1, 2.2, 1.3, 1.4, 2.5])

数学和统计方法

这些方法既可以当做实例方法调用arr2d.sum()也可以通过np.sum(arr2d)

sum 计算所有元素的和

mean 计算所有元素的均值

std/var 计算标准差和方差

min/max 最大值和最小值

argmin/argmax 最小值和最大值的索引

cumsum 返回一个所有元素累加的数组 累计和

cumprod 所有元素的累计积

用于布尔型数组的方法

#True直接当1计算

In [24]: (arr2d<4).sum()

Out[24]: 3

In [25]: cond

Out[25]: array([ True, False, True, True, False])

In [26]: cond.any()

Out[26]: True

In [27]: cond.all()

Out[27]: False

排序

np.sort() 这个会复制一个副本

arr2d.sort()是在源数据上的操作

6.用于数组文件的输入输出

将数组以二进制形式保存到磁盘

np.save()

np.load()

存取文本文件

np.loadtext()

np.savetext()

7.线性代数 找不到时就在numpy.linalg

注:转置 arr.T

np.dot(arr1,arr2) 两个矩阵的乘积

np.diag 返回对角线元素/或以一维数组转化为以此为对角线的方阵

trace() 计算对角线的和

det 计算f方阵的行列式值

eig 计算特征值和特征向量

inv 计算逆矩阵

pinv 计算伪逆矩阵

qr 计算QR分解

svd 计算奇异值分解

solve 解线性方程Ax=b

lstsq 计算Ax=b的最小二乘解

8.随机数生成 numpy.random对Python内置的random进行了补充

seed 确定随机数生成的种子

permutation 返回一个序列的随机排列或返回一个随机排列的范围

shuffle 对一个序列就地随机排列

rand 产生均匀分布的样本值

randint 从给定的上下范围内随机选取整数

randn 产生正态分布的样本值

binomial 产生二项分布的样本值

normal 产生二项分布的样本值

beta 产生Beta分布的样本值

chisquare 产生卡方分布的样本值

gamma 产生Gamma分布的样本值

uniform 产生(0,1)均匀分布的样本值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值