python三剑客是什么意思_Python:数据分析中的三剑客,之,Numpy

Numpy

:

numpy(numeric python)是Python的开源数字扩展,定义了数值数组和矩阵类型,以及基本运算的语言扩展,可用于矩阵数据、矢量处理等。

pip安装

: pip install numpy

numpy使用

1.创建数组

创建数组有4种方式:array,arange,linspace,logspace

*** array:

array将元组或列表作为参数,创建一个一维或多维数组,如array([1,2,3])

*** arange:

arange与range类似,功能比range更强大,arange也接收三个参数start、end、step,但arange的step可以是浮点数

*** linspace

linspace三个主要参数,start、stop、num,返回首项是start,末项是stop,共num项的等差序列

*** logspace

logspace三个主要参数,start、stop、num,返回首项是10的start次方,末项是10的stop次方,共num项的等比序列

2.索引与切片

与列表元组类似,numpy一维或多维数组也有索引和切片,但比元组和列表的要更灵活

3.矩阵

加减乘除模幂,与寻常运算并无差别,加减乘除模都是项对项,与数学的矩阵相乘不同,

类型转换需得注意,比如只要有一个运算结果为float,那么真个矩阵全部元素都会变成float

4.numpy.ndarray类型属性及注意事项

属性:

*** ndim    数组的维度

*** shape   数组的各维度,类型是元组

*** size    数组元素个数,各维度乘积

*** dtype   数据元素类型

*** itemsize    数据元素字节数

*** data    数据存放地址

注意事项:

*** 以二维数组为例,当数组每行列数不同时(各行不定长),dim = 1,shape = (行数,)被视为一维数组。

此时使用切片[0,0:2]时会有indexError异常,并且无法获取size属性。

*** ndarray会自动转换类型,如[1,2,3]的dtype = int32,而[1,2,3.0]的dtype = float64,[1,2,"3"] 的dtype =

至于转换原因,那肯定是为了不丢失有效数据位

*** transpose(*axes):

原码注释:

axes : None, tuple of ints, or `n` ints

* None or no argument: reverses the order of the axes.

* tuple of ints: `i` in the `j`-th place in the tuple means `a`'s

`i`-th axis becomes `a.transpose()`'s `j`-th axis.

* `n` ints: same as an n-tuple of the same ints (this form is

ntended simply as a "convenience" alternative to the tuple form)

意思是:

**  不给出axes默认反转整个shape元组,也就是说a*b*c*d....*n的多维矩阵会被转置为n*...*d*c*b*a的矩阵

以二维矩阵为例3*4的矩阵会被转置为4*3的矩阵,对应transpose(1,0)或者transpose()

**  给出axes,axes是个元组,如axes = (1,2,0)这个意思是将shape[0]放置到shape[2]后面,如shape为(1,2,3)就会变成

(2,3,1),也即1*2*3原矩阵会变成2*3*1矩阵

Python样例代码:

import numpy as np

if __name__ == "__main__":

# 1.创建数组

array_mine = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [7, 8, 9, 10]])

arange_mine = np.arange(1, 3, 0.2)

linspace_mine = np.linspace(1, 10, 10)

logspace_mine = np.logspace(0, 6, 7)

print("array_mine = \n" + str(array_mine) + "\ntype = " + str(type(array_mine)))

print("arange_mine = " + str(arange_mine) + " type = " + str(type(arange_mine)))

print("linspace_mine = " + str(linspace_mine) + " type = " + str(type(linspace_mine)))

print("logspace_mine = " + str(logspace_mine) + " type = " + str(type(logspace_mine)))

print("\n\n")

# 2.索引和切片 以array_mine为例

# 选取全部元素 array_mine[:] == array_mine

print("选取全部元素 array_mine[:] = {}".format(array_mine[:]))

# 选取第0行

print("选取第0行 array_mine[0] = {}".format(array_mine[0]))

# 选取0~2行,不包括第2行

print("选取0~2行,不包括第2行 array_mine[0:2] = {}".format(array_mine[0:2]))

# 选取第0行下标0~2,不包括2

print("选取第0行下标0~2,不包括2 = {}".format(array_mine[0, 0:2]))

# 选取第1行第1列

print("选取第1行第1列 = {} ".format(array_mine[1, 1]))

# 按条件截取

print("选中array_mine中所有大于5的元素 = {}".format(array_mine[array_mine > 5]))

# 甚至可以给大于5的元素赋值,如 array_mine[array_mine>5] = 0

print("比较array_mine中每一个值 a>5 = \n{}".format(array_mine > 5))

# 矩阵运算

array = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [7, 8, 9, 10]])

# 加减乘除模幂,与寻常运算并无差别,加减乘除模都是项对项,与数学的矩阵相乘不同,

# 类型转换需得注意,比如只要有一个运算结果为float,那么真个矩阵全部元素都会变成float

print("array_mine*array = \n{}".format(array_mine * array))

print("array**2 = \n{}".format(array ** 2))

# 矩阵点乘,即线代中的矩阵相乘,将array重塑为4*3的矩阵以满足矩阵相乘

print("矩阵点乘:\n{}".format(array_mine.dot(array.reshape(4, 3))))

# 矩阵转置

print("矩阵转置:\n{}".format(array_mine.transpose()))

# 求逆矩阵

print("求逆矩阵:\n{}".format(np.linalg.inv(np.array([[1, 2], [3, 4]]))))

PS:代码clone地址:github.com:Rlyslata/DataStauct-And-Algorithm.git

路径: pythons数据分析三剑客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值