python数据分析与展示--NumPy库入门

限制我们的不是学历,而是格局!

目录

一.数据的维度

二.NumPy的数据对象:ndarray

三.ndarray数组的元素类型

四.ndarray数组的创建

        1.从python中列表,元组等类型创建ndarray数组

        2.使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

五.ndarray数组的变换

        1.ndarray数组的维度变换

        2.ndarray数组的类型变换

        3.ndarray数组的向列表的变换

六.ndarray数组的操作

        1.一维数组的索引和切片

        2.多维数组的索引和切片

七.ndarray数组的运算

        1.数组与标量之间的运算

        2.NumPy一元函数

        3.NumPy二元函数


一.数据的维度

1.一维数据

一维数据由对等关系的有序或无序数据构成,采用线性方程组织,对应列表,数组和集合等概念

(1)线性方式组织:

3 1 3 4 5 66 7

(2)列表和数组区别:

列表:数据类型可以不同

3.14 3.12 ‘python’ [3.14]

数组:数据类型相同

1 2 3 4 5 6 7

2.二维数据

二维数据由多个一维数据构成,是一维数据的组合形式,表格是典型的二维数据

3.多维数据

多维数据由一维或多维数据在新维度上扩展形成

4.高维数据

高维数据仅利用最基本的二元关系展示数据间的复杂结构

{

"name":"myun",
"love":"sing",
"address":{
        "school":"延大",
        "zipcode":"12312"
},
"prof":["Computer System","Security"]
}

5.数据维度的python表示

一维数据:列表和集合类型        [3.14 , 3.12 , 3.16]有序

                                                   {3.14 , 3.13 , 3.16}无序

二维数据:列表类型        [ [3.14 , 3.12 , 3.15] , [3.21 , 3.18] ]

多维数据:列表类型

高维数据:字典类型或数据类型表示

dict={

“name”:“myun”,

“age”:21,

}

或者 JSON,XML和YAML格式


二.NumPy的数据对象:ndarray

NumPy是一个开源的Python科学计算基础库,包含:

        ·一个强大的N维数组对象ndarray

        ·广播功能函数

        ·整合C/C++/Fortran代码的工具

        ·线性代数,傅里叶变换,随机数生成等功能

NumPy是SciPy,Pandas等数据处理或科学计算库的基础

1.NumPy的引用

格式:

import numpy as np
<!--np为引入块的别名-->

2.N维数组的对象:ndarray

(1)ndarray是一个多维度数组对象,由两部分构成:

·实际数据

·描述这些数据的元数据(数据维度,数据类型)

ndarray数组一般要求所有元素类型相同,数组下表从0开始

ndarray实例:

import numpy as np

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

'''输出:
[[0 1 2]
 [3 4 5]]'''

array是ndarray在程序中的别名。

3.ndarray对象的属性

ndarray对象的属性
属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,相当于矩阵,n行m列
.sizendarray对象元素的个数,相当于.shape的n*m的值
.itmesizendarray对象中每个元素的大小,以字节为单位

例如:

import numpy as np

a=np.array([[1,2,3],
           [5,6,7]])
print("秩:",a.ndim)
print("尺度:",a.shape)
print("个数:",a.size)
print("元素类型:",a.dtype)
print("元素大小:",a.itemsize)

'''输出
秩: 2
尺度: (2, 3)
个数: 6
元素类型: int32
元素大小: 4'''

非同质的ndarray对象:

import numpy as np

a=np.array([[1,2,3,8],
           [5,6,7]])    #ndarray数组可以由非同质对象构成
print("秩:",a.ndim)
print("尺度:",a.shape)
print("个数:",a.size)
print("元素类型:",a.dtype)    #非同质ndarray元素为对象类型
print("元素大小:",a.itemsize)  #非同质ndarray对象无法发挥NumPy的优势,尽量避免使用

'''
秩: 1
尺度: (2,)
个数: 2
元素类型: object
元素大小: 8
'''

三.ndarray数组的元素类型


四.ndarray数组的创建

1.从python中列表,元组等类型创建ndarray数组

x=np.array(list/tuple)

x=np.array(list/tuple,dtype=np.float32)

当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型

代码:

import numpy as np

a=np.array([0,1,2])     #从列表类型创建
b=np.array((3,4,5))     #从元组类型创建
c=np.array([[1,2,3],[4,5,6],(7,8,9)])   #从列表和元组混合类型创建
print('a:',a)
print('b:',b)
print('c:',c)

'''
a: [0 1 2]
b: [3 4 5]
c: [[1 2 3]
 [4 5 6]
 [7 8 9]]

'''

2.使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.linspace()根据起止数据等间距地填充数据,形成数组
np.concatenate()将两个或多个数组合并成一个新的数组

arange函数创建:

import numpy as np

a=np.arange(10)
print(a)
#输出:[0 1 2 3 4 5 6 7 8 9]

ones函数创建:

import numpy as np

a=np.ones((3,4))
print(a)
'''输出:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
'''
b=np.ones((2,3,2))  #输出两个3行2列的矩阵
print(b)
'''输出
[[[1. 1.]
  [1. 1.]
  [1. 1.]]

 [[1. 1.]
  [1. 1.]
  [1. 1.]]]
'''

zeros函数创建:

import numpy as np

a=np.zeros((3,4),dtype=np.int32)
print(a)
'''输出
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]
'''

eye函数创建:

import numpy as np

a=np.eye(4)
print(a)
'''输出
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
'''

五.ndarray数组的变换

对于创建后ndarray数组,可以对其进行维度变换和元素类型变换

a=np.ones((2,3,4),dtype=np.int32)

1.ndarray数组的维度变换

维度变换方法
方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一样,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一堆数组,原数组不变

维度变换代码:

reshape方法:

import numpy as np

a=np.ones((2,3,4),dtype=np.int32)
a=a.reshape((3,8))  #将两个3行4列的矩阵变换为3行8列的矩阵
print(a)
'''
输出:
[[1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]]
'''

resize方法:

import numpy as np

a=np.ones((2,3,4),dtype=np.int32)
a.resize((3,8))  #将两个3行4列的矩阵变换为3行8列的矩阵
print(a)        #resize修改原数组,但reshape不会修改原数组
'''
输出:
[[1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]]
'''

flatten方法:

import numpy as np

a=np.ones((2,3,4),dtype=np.int32)
b=a.flatten()   #对数组进行降维,返回折叠后的一维数组,原数组不变
print(b)
'''
输出:
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
'''

2.ndarray数组的类型变换

格式:

new_a=astype(new_type)

代码:

import numpy as np

a=np.ones((2,3,4),dtype=np.int32)
b=a.astype(np.float_)   
print(b)
'''
输出:
[[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
'''

3.ndarray数组的向列表的变换

格式:

ls=a.tolist()

代码:

import numpy as np

a=np.full((2,3,4),6,dtype=np.int32)
b=a.tolist()
print('数组:',a)
print('变列表后:',b)

'''
输出:
数组: [[[6 6 6 6]
  [6 6 6 6]
  [6 6 6 6]]

 [[6 6 6 6]
  [6 6 6 6]
  [6 6 6 6]]]
变列表后: [[[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]], [[6, 6, 6, 6], [6, 6, 6, 6], [6, 6, 6, 6]]]
'''

六.ndarray数组的操作

数组的索引也切片:

 ·索引:获取数组中特定位置元素的过程

·切片:获取数组元素子集的过程

1.一维数组的索引和切片

代码:

import numpy as np

a=np.array([5,8,2,9,4])
b=a[2]
c=a[0:4:2]      #3元素冒号分割,起始编号:(不包含)终止编号:步长
print('下标为2的元素:',b)
print('从0~4步长为2的元素:',c)
'''
输出
下标为2的元素: 2
从0~4步长为2的元素: [5 2]
'''

2.多维数组的索引和切片

(1)多维数组的索引:

import numpy as np

a=np.arange(24).reshape((2,3,4))
b=a[1,2,3]   #第2个矩阵3行4列的值
c=a[0,2,3]  #第1个矩阵3行4列的值
d=a[-1,-2,-3]   #倒数第一个矩阵倒数第2行倒数第3列的值
print('原数组:',a)
print('第2个矩阵3行4列的值:',b)
print('第1个矩阵3行4列的值:',c)
print('倒数第一个矩阵倒数第2行倒数第3列的值:',d)
'''
原数组: [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
第2个矩阵3行4列的值: 23
第1个矩阵3行4列的值: 11
倒数第一个矩阵倒数第2行倒数第3列的值: 17
'''

(2)多维数组的切片:

import numpy as np
#[:,切片位置,切片个数]
a=np.arange(24).reshape((2,3,4))
b=a[:,1,-3]     #选取一个维度用:,表示第一行倒数第三列的值
c=a[:,1:3,:]    #选取每个维度1~3行所有元素(不包含3行)
d=a[:,:,::2]    #每一个维度选取步长为2的元素
print('原数组:\n',a)
print('第一行倒数第三列的值:\n',b)
print('取每个维度1~3行所有元素:\n',c)
print('每一个维度选取步长为2的元素:\n',d)
'''原数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
第一行倒数第三列的值:
 [ 5 17]
取每个维度1~3行所有元素:
 [[[ 4  5  6  7]
  [ 8  9 10 11]]

七.ndarray数组的运算

1.数组与标量之间的运算

数组与标量的运算作用于数组的每一个元素

代码:

import numpy as np
#[:,切片位置,切片个数]
a=np.arange(24).reshape((2,3,4))
b=a.mean()  #所有元素的平均值
c=a/b    #计算a与所有元素的平均值的商,运算作用于所有元素
print('原数组:\n',a)
print('元素平均值:\n',b)
print('计算a与所有元素的平均值的商:\n',c)
'''原数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
元素平均值:
 11.5
计算a与所有元素的平均值的商:
 [[[0.         0.08695652 0.17391304 0.26086957]
  [0.34782609 0.43478261 0.52173913 0.60869565]
  [0.69565217 0.7826087  0.86956522 0.95652174]]

 [[1.04347826 1.13043478 1.2173913  1.30434783]
  [1.39130435 1.47826087 1.56521739 1.65217391]
  [1.73913043 1.82608696 1.91304348 2.        ]]]
'''

2.NumPy一元函数

对ndarray中的数据执行元素级运算的函数
函数说明
np.abs(x)        np.fabs(x)计算数组各元素的绝对值
np.sqrt(x)计算数组各元素的平方根
np.square(x)计算数组各元素的平方
np.log(x)        np.log10(x)        np.log2(x)计算数组各元素的自然对数,以10底对数和以2为底对数
np.ceil(x)        np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素四舍五入值
np.modf(x)将数组各元素的小数部分和整数部分以两个独立数组形式返回

np.cos(x)        np.cosh(x)

np.sin(x)        np.sinh(x)

np.tan(x)        np.tanh(x)

计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数
np.sing(x)计算数组各元素的符号值,1(+), 0, -1(-)

代码:

square函数:

import numpy as np

a=np.arange(24).reshape((2,3,4))
b=np.square(a)
print('原数组:\n',a)
print('a的平方:',b)
'''原数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
a的平方: [[[  0   1   4   9]
  [ 16  25  36  49]
  [ 64  81 100 121]]

 [[144 169 196 225]
  [256 289 324 361]
  [400 441 484 529]]]
'''

sqrt函数:

import numpy as np

a=np.arange(24).reshape((2,3,4))
b=np.sqrt(a)
print('原数组:\n',a)
print('a的平方根:\n',b)
'''原数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
a的平方根:
 [[[0.         1.         1.41421356 1.73205081]
  [2.         2.23606798 2.44948974 2.64575131]
  [2.82842712 3.         3.16227766 3.31662479]]

 [[3.46410162 3.60555128 3.74165739 3.87298335]
  [4.         4.12310563 4.24264069 4.35889894]
  [4.47213595 4.58257569 4.69041576 4.79583152]]]
'''

modf函数:

import numpy as np

a=np.arange(24).reshape((2,3,4))
b=np.sqrt(a)
c=np.modf(b)
print('原数组:\n',a)
print('modf方法:\n',c)
'''原数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
modf方法:
 (array([[[0.        , 0.        , 0.41421356, 0.73205081],
        [0.        , 0.23606798, 0.44948974, 0.64575131],
        [0.82842712, 0.        , 0.16227766, 0.31662479]],

       [[0.46410162, 0.60555128, 0.74165739, 0.87298335],
        [0.        , 0.12310563, 0.24264069, 0.35889894],
        [0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[0., 1., 1., 1.],
        [2., 2., 2., 2.],
        [2., 3., 3., 3.]],

       [[3., 3., 3., 3.],
        [4., 4., 4., 4.],
        [4., 4., 4., 4.]]]))
'''

3.NumPy二元函数

函数说明
+  -  *  /  **两个数组各元素进行对应运算

np.maximum(x,y)        np.fmax()

np.minimum(x,y)        np.fmin()

元素的最大值/最小值
np.mod(x,y)元素级的模运算
np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
>  <  >=  <=   ==  !=算术比较,产生布尔类型数组

代码:

import numpy as np

a=np.arange(24).reshape((2,3,4))
b=np.sqrt(a)
c=np.maximum(a,b)   #元素最大值
d=a>b
print('a数组:\n',a)
print('b数组:\n',b)
print('a,b数组最大值:\n',c)
print('a是否等于b:\n',d)
'''
a数组:
 [[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
b数组:
 [[[0.         1.         1.41421356 1.73205081]
  [2.         2.23606798 2.44948974 2.64575131]
  [2.82842712 3.         3.16227766 3.31662479]]

 [[3.46410162 3.60555128 3.74165739 3.87298335]
  [4.         4.12310563 4.24264069 4.35889894]
  [4.47213595 4.58257569 4.69041576 4.79583152]]]
a,b数组最大值:
 [[[ 0.  1.  2.  3.]
  [ 4.  5.  6.  7.]
  [ 8.  9. 10. 11.]]

 [[12. 13. 14. 15.]
  [16. 17. 18. 19.]
  [20. 21. 22. 23.]]]
a是否等于b:
 [[[False False  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]

 [[ True  True  True  True]
  [ True  True  True  True]
  [ True  True  True  True]]]
'''
未完待更........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前段被迫创业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值