程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

numpy 介绍和基础使用详解

发布于2019-08-23 11:49     阅读(1058)     评论(0)     点赞(8)     收藏(2)


NUMPY INTRODUCTION

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创建数组:

例:创建一个图一的数组
 
1 2 3
4 5 6

方法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()



所属网站分类: 技术文章 > 博客

作者:齐天大圣

链接:https://www.pythonheidong.com/blog/article/54503/84d363eab9b63fdceb44/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)