numpy 介绍和基础使用详解

NUMPY INTRODUCTION

       原文链接:numpy 介绍和基础使用详解 - 木秀 - 博客园

NUMPY 提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于处理多维数组,用于储存和处理大型矩阵,本身是由C语言开发,比python自身的列表结构要高效的多。

高性能科学计算和数据分析的基础包,总结:

• NUMPY是一个Python科学计算基础库,提供了多维向量

• NUMPY提供了用于数组快速操作的方法,数学,逻辑,排序,选择,线性代数,统计等

• NUMPY采用预编译的C代码完成,效率更高

安装:

1

pip install numpy

使用:

1

import numpy as np

行业惯例将np作为numpy,将pd作为pandas。下文所有np均指的是numpy

认识轴:

轴【axis】:

 既然是多维数组,先理清一下轴,类似于我们学习的X、Y、Z

二维数组的轴:

                                       图一

三维数组的轴:

                                                    图二

使用NUMPY创建数组:

例:创建一个图一的数组

123
456

方法1:    np.array([])

a=np.array([[1,2,3],[4,5,6]])
 
b=np.array([range(1,4),range(4,7)])
 
c=np.array([[i for i in range(1,4)],[i for i in range(4,7)]]) 

[[1 2 3]

[4 5 6]]

方法2:    np.arange()

#1~6 步数为1

d=np.arange(1,7,1)

[1,2,3,4,5,6]

#将一维数组转变为二维

d=d.reshape(2,3)

[[1 2 3]

[4 5 6]]

常用属性和方法

形状

ndarray.shape   

重新改变数组形状

ndarray.reshape(x_dim, y_dim, z_dim,…)

数组的维度

ndarray.ndim  

itemsize输出array元素的字节数

numpy.itemsize

数组的形状:

nparray.shape:

#查看数组的形状维度

d=np.arange(1,7,1)
print(d.shape)

(6,)

nparray.reshape:

#改变数组的维度,规则1*6==2*3

d=d.reshape(2,3). #或者: d=np.reshape(d,(2,3))
print(d.shape)

(2, 3)

获取数组的维度,可使用len(nparray.shape),即元祖的维度,即numpy.itemsize

将多维数组转换为一维数组方式:

自己动手:

def createOnenp(nparray):
    num=1
    for i in len(nparray.shape):
        num=num*nparray.shape[i]
    return nparray.reshape(num)

实际又是自己在造轮子,可使用np自带方法:

nparray= nparray.flatten()

a=np.array([[1,2,3],[4,5,6]])
print(a)
a=a.flatten()
print(a)

[[1 2 3]

[4 5 6]]

[1 2 3 4 5 6]

数组的计算:

情况一:数组和数值直接运算

a=np.array([i for i in range(1,7)])#生产一维数组
a=a.reshpe(2,3)

[[1 2 3]

[4 5 6]]

数组可以直接与数字进行四则运算(+、-、*、/)

即数组里的每一个值分别四则运算

print(a+2)

[[3 4 5]

[6 7 8]]

print(a/0)

[[inf inf inf]

[inf inf inf]]

在numpy中,/0并不会报错,

inf(infimum)表示无穷,

nan(not a number)代表未定义或不可表示的值,

情况二:数组与数组计算

这里要注意了,数组和数组的计算和矩阵是不同的

矩阵的乘积:

数组的乘积:

相同的多维数组或直接与单维度轴相同,可以直接四则运算:

方式:广播(broadcast)

a:

[[1 2 3]

[4 5 6]]

print(a*a)

[[ 1  4  9]

[16 25 36]]

b:

[1 2 3]

print(a*b)

[[ 1  4  9]

[ 4 10 18]]

c:

[[1]

[2]]

print(a*c)

[[ 1  2  3]

[ 8 10 12]]

数组的操作:

1、转置操作

a=np.array([i for i in range(1,7)])#生产一维数组
a=a.reshpe(2,3)

[[1 2 3]

[4 5 6]]

  •     a.T

[[1 4]

[2 5]

[3 6]]

  • a.transpose()

[[1 4]

[2 5]

[3 6]]

  • a.swapaxes(1,0)    #交换0轴和1轴

[[1 4]

[2 5]

[3 6]]

2、切片

a=np.array([i for i in range(1,10)])#生产一维数组
a=a.reshpe(3,3)

[[1 2 3]

[4 5 6]

[7 8 9]]

2.1取行

2.1.1、取第x行  

print(a[x])

print(a[1])

[4 5 6]

2.1.2、取多行

print(a[[x,x]])

print(a[[0,2]])#取第一行和第三行

[[1 2 3]

[7 8 9]]

2.1.3、取连续多行

print(a[x:y:z]) #连续取从x行到y行,不包括y,间隔为z

print(a[0:3])#取第一行到第四行不包括第四行,也就是前面三行,和list切片类似,左闭右开

[[1 2 3]

[4 5 6]

[7 8 9]]

print(a[0:3:2])

[[1 2 3]

[7 8 9]]

2.2取列

和取行类似

a[:,x]#取x列

a[:,x:y]#取下标为x到下标为y-1的列

a[:,x:y:z]#取下标为x到下标为y-1,间隔为z的列

a[:,[x,y]] #取下标为x,y的两列

2.3取某一点

a[1,1]=a[1][1]

5

2.4取某一部分

print(a[1:3,1:3])

[[5 6]

[8 9]]

布尔索引、三元运算、裁剪

a=np.array([i for i in range(1,10)])#生产一维数组
a=a.reshpe(3,3)

[[1 2 3]

[4 5 6]

[7 8 9]]

布尔索引:

print(a>5)

[[False False False]

[False False  True]

[ True  True  True]]

print(a[a>5])

[6 7 8 9]

a[a>5]=5
print(a)

[[1 2 3]

[4 5 5]

[5 5 5]]

三元运算:

data1=np.where(a<5,1,9)#比5小的全部修改为1,其他的改为9
Print(data1)

[[1 1 1]

[1 9 9]

[9 9 9]]

裁剪

data2=a.clip(3,7)#小于3的替换为3,大于7的替换为7
print(data2)

[[3 3 3]

[4 5 6]

[7 7 7]]

常用的统计函数

求和:nparray.sum(axis=None)

均值:nparray.mean(axis=None) 受离群点的影响较大

中值:np.median(nparray,axis=None)

最大值:nparray.max(axis=None)

最小值:nparray.min(axis=None)

极值:np.ptp(nparray,axis=None) 即最大值和最小值只差

标准差:nparray.std(axis=None)

其他方法

获取最大值最小值的位置

  np.argmax(nparray,axis=0)

  np.argmin(nparray,axis=1)

创建一个全0的数组: np.zeros((3,3))

[[0. 0. 0.]

[0. 0. 0.]

[0. 0. 0.]]

创建一个全1的数组: np.ones((3,3)) 

[[1. 1. 1.]

[1. 1. 1.]

[1. 1. 1.]]

创建一个对角线为1的正方形数组(方阵):np.eye(3)

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

NUMPY中的复制操作

a=b 完全不复制,a和b相互影响

a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,

a = b.copy(),复制,a和b互不影响

等等用法:

• numpy.sort()

• numpy.amin()  numpy.amax()

• numpy.mean()  numpy.average()  

• numpy.std()  # sqrt(mean((x - x.mean())**2))

• numpy.var()  # mean((x - x.mean())** 2) 

• numpy.sin() cos() tan() pi arcsin(), arccos() arctan() degrees()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值