numpy库的使用

       

目录

一、numpy库的概述

二、创建ndarray

1、使用np.array()

2、使用np.ones(shape, dtype = None, order = 'C')

3、np.zeros(shape,dtype = float, order = 'C')

4、np.full(shape, fill_value, dtype = None, order = ‘C’)

5、np.eye(N, M=None,k=0,dtype=float)

6、np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

7、np.arange([start, ]stop,[step,] dtype = None)

8、np.random.randint(low, high= None, size = None, dtype='l')

9、np.random.randn(d0,d1,...,dn)

10、np.randam.normal(loc = 0.0,  scale = 1.0,size = None)

11、np.random.random(size = None)

12、np.random.rand(d0,d1,...,dn)

三、ndarray的属性

四、Numpy的基本操作

1、Ndarray索引操作

2、Ndarray切片操作

五、Numpy的一些常用函数

1、reshape变形

2、级联


        要点:numpy是用于处理含有同种元素的多维数组运算的第三方库

一、numpy库的概述

        Python 标准库中提供了一个array类型,用于保存数组类型数据,然而这个类型不支持多维数据,处理函数也不够丰富,不适合数值运算。因此,Python语言的第三方库numpy 得到了迅速的发展,至今,numpy 已经成为了科学计算事实上的标准库。

        numpy  库处理的最基础的数据类型是由同种元素构成的多维数组,(ndarray),简称“数组”。数组中所有元素的类型必须相同,数组中的元素可以用整数索引,序号从开始。ndarray类型维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1, 二维数组的秩为2,二维数组相当于由两个一维数组构成。

        由于numpy库中函数较多且名字容易与常用的命名混淆, 建议采用如下的方式引用numpy 库:

import numpy as np

         其中,as保留字与import 一起使用能够改变后续代码中库的命名空间, 有助于提高代码的可读性。简单地说,在程序的后续部分中,np代替numpy。  

在数据分析中一切皆数据。

二、创建ndarray

        扩展库Numpy 可以把Python 列表、 元组、 range 对象等转换为数组, 也可以直接生成待定类型的数组, 支持数组与标量。数组与数组之间的四则运算, 以及布尔运算、 函数运算等功能。

1、使用np.array()

①、numpy默认ndarray的所有元素的类型是相同的

②、如果传进来的列表中包含不同的类型, 则统一为统一类型, 优先级:str > float > int

③、ndarray的常用数据类型(在后面需要指定类型的时候会用到)

        int:int8 、int16、int32、int64。

        florat:float16、float32、float64。、

        str:字符串

# 导入numpy 第三方标准库
import numpy as np

a = np.array([2, 2.2, '2'])
print(a)

"""
输出结果:['2' '2.2' '2']
"""

2、使用np.ones(shape, dtype = None, order = 'C')

创建一个所有元素都为1的多维数组

参数说明:

        ①.shape:形状

        ②.dtype = None:元素类型 。在这里指定类型的时候np.int16...或者其他上面出现的类型

        ③.order:{‘C’, ‘F’},可选,默认值:C是否在内存中已经为主(C-风格)或为主(Fort然风格)顺序存储多维数据一般默认即可。

# 导入numpy 第三方标准库
import numpy as np

a = np.ones(shape=(2, 2), dtype=np.int16)
print(a)

"""
输出结果:
[[1 1]
 [1 1]]
"""

3、np.zeros(shape,dtype = float, order = 'C')

创建一个所有元素都为0的多维数组

参数说明:

        ①.shape:形状

        ②.dtype = None:元素类型

# 导入numpy 第三方标准库
import numpy as np

a = np.zeros(shape=(2, 2), dtype=np.int16)
print(a)
# 下面的shape,和dtype:给省略了; 和上面的代码相同
a = np.zeros((2, 2), np.int16)
print(a)

"""
输出结果:
[[0 0]
 [0 0]]
"""

4、np.full(shape, fill_value, dtype = None, order = ‘C’)

创建一个所有元素都为指定元素的多维数组

参数说明:

        ①.shape:形状

        ②.fill_value:填充值

        ③.dtype = None:元素类型

# 导入numpy 第三方标准库
import numpy as np

a = np.full(shape=(2, 2), fill_value=6, dtype=str)
print(a)

"""
输出结果:
[['6' '6']
 ['6' '6']]
"""

5、np.eye(N, M=None,k=0,dtype=float)

对角线为1 其他的位置为0 的二维数组

参数说明:

        ①.N:行数

        ②.M:列数

        ③.k = 0:向右偏移0个位置,主对角线。k也可以等于负数向左偏移。

        ④.dtype = None:元素类型

注意:在这里输入行数和列数是没有小括号的。

# 导入numpy 第三方标准库
import numpy as np

a = np.eye(3, 2, k=-1, dtype=np.int16)
print(a)

"""
输出结果:
[[0 0]
 [1 0]
 [0 1]]
"""

# 也可以只写N,则M会默认和N相同
a = np.eye(N=3, dtype=np.int16)
print(a)
"""
输出结果:
[[1 0 0]
 [0 1 0]
 [0 0 1]]
"""

6、np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

        上面这一个比较常用

创建一个等差数列

参数说明:

        ①. start:开始值

        ②. stop:结束值

        ③. num = 50:等差数列中默认有50个数

        ④. endpoint = True:是否包含结束值,在默认情况下是包含的。

        ⑤. retstep = False:是否返回等差值(步长)当等于True时会在最后显示步长。

        ⑥. dtype = None:元素类型

注意:默认的情况下是包含结束值的,一般只会给前三个参数。

# 导入numpy 第三方标准库
import numpy as np

a = np.linspace(1, 5, num=3)
print(a)

"""
输出结果:
[1. 3. 5.]
"""

7、np.arange([start, ]stop,[step,] dtype = None)

创建一个数值范围的数组

和Python中range功能类似

参数说明:

  • start:开始值(可选)
  • stop:结束值(不包含)
  • step:步长(可选)
  • dtype = None:元素类型
# 导入numpy 第三方标准库
import numpy as np

a = np.arange(1, 5, 2)
print(a)

"""
输出结果:
[1 3]
"""

8、np.random.randint(low, high= None, size = None, dtype='l')

创建一个随机的整数的多维数组

参数说明:

        ①. low:最小值high = None:

        ②. 最大值, 如果high = None时,生成的数值在[low, high)区间,如果使用high这个值,则生产=成的数值在[low, high]区间。

        ③. size = None:数组形状,默认只输出一个随机值。

        ④. dtype = None:元素类型

# 导入numpy 第三方标准库
import numpy as np
a = np.random.randint(1, 20, 5)
print(a)

"""
输出结果:
[ 1 19 14 13  5]
因为是随机的每一次都不会一样。
"""

9、np.random.randn(d0,d1,...,dn)

        创建一个服从标准正态分布的多维数组。

        标准正态分布称为u分布,是以0为均数,以1为标准差的正态分布,记作N(0, 1)标准正态分布,在0左右出现的概率最大,越远离出现的概率越低,

参数说明:

        dn:第n个维度的数值

# 导入numpy 第三方标准库
import numpy as np
a = np.random.randn(2, 2)
print(a)

"""
结果在原点的左右
输出结果:
[[-0.00928067 -0.89980204]
 [ 0.38432625 -0.04058469]]
"""

10、np.randam.normal(loc = 0.0,  scale = 1.0,size = None)

创建一个服从正态分布的多维数组

参数说明:

        ①.、loc = 0.0:均值,值对应着正态分布的中心。

        ②、scale:标准差,对应分布的宽度,scale越大,正态分布的曲线越胖,scale越小,曲线越高瘦

        ③、size = None:数组形状

# 导入numpy 第三方标准库
import numpy as np
a = np.random.normal(100, 10, (3, 3))
print(a)

"""
输出结果:
[[ 99.05578725  91.85309708  95.42088503]
 [ 96.97259129 113.00102822  86.52416231]
 [ 91.13560786  83.6749118   87.44230937]]
"""

11、np.random.random(size = None)

创建一个元素为0~1(左闭右开)的随机数的多维数组。

参数说明:

        size = None:数组形状。

# 导入numpy 第三方标准库
import numpy as np

a = np.random.random(size = (2, 2))
print(a)

"""
输出结果:
[[0.63589886 0.32039163]
 [0.279946   0.85167285]]
"""

12、np.random.rand(d0,d1,...,dn)

        创建一个元素为0~1(左闭右开)的随机数的多维数组

        和np.random.random(size = None)功能类似,掌握其中一个即可。

参数说明:

         dn: 第n个维度的数值。

# 导入numpy 第三方标准库
import numpy as np

a = np.random.rand(3, 2)
print(a)

"""
输出结果:
[[0.26175765 0.9252808 ]
 [0.96853119 0.16443834]
 [0.83595591 0.44628897]]
"""

三、ndarray的属性

4个重要属性:

        ①、ndim:维度

        ②、shape:形状(各维度的长度)

        ③、size:总长度,表示主数据量

        ④、dtype:元素类型

import numpy as np

a = np.array([[1, 2], [1, 2]])
print(a)
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)

"""
输出结果:
[[1 2]
 [1 2]]
2
(2, 2)
4
int32
"""

四、Numpy的基本操作

1、Ndarray索引操作

        1、一维与列表完全一致 多维时同理

        2、 多维数组:在利用索引取数是可以简化

        3、其他的和Python的列表几乎相同, 也可以根据下标来更改数组中的数组,唯一的不同是在Ndrray多维数组 修改时(看下面代码的例子:就会发现与列表修改的不同)。

import numpy as np

a = np.random.randint(0, 101, (5, 5))
print("原数组 = ", a)
print("把最后一个元素取出来 = ", a[-1][-1])
print("把最后一个元素取出来 = ", a[4][4])
# 简化,简写
print("把最后一个元素取出来 = ", a[-1, -1])
print("把最后一个元素取出来 = ", a[4, 4])


"""
原数组 =  [[86 45 91 13 95]
 [ 1 29 67 67 73]
 [22  9 56 21 67]
 [35 38 41  0 37]
 [84 63 94 76 10]]
把最后一个元素取出来 =  10
把最后一个元素取出来 =  10
把最后一个元素取出来 =  10
把最后一个元素取出来 =  10
"""

# 通过索引来修改数组
a = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
c = np.array(a)
c[0][0] = 10
print(c)

"""
输出结果:
[[[10 10]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]]
"""

2、Ndarray切片操作

        1、一维时与列表完全一致。

        2、二维数据:①、取一行,取连续的多行,取不连续的多行。

                                ②、取一列,取连续的多列,取不连续的多列。

                                ③、翻转。

     有关取行的代码:

import numpy as np

# a = np.random.randint(0, 5, size=(5, 5))
a = np.array([[1, 4, 4, 0, 1],
              [3, 0, 2, 2, 2],
              [4, 2, 2, 4, 3],
              [4, 3, 0, 2, 2],
              [2, 3, 1, 2, 2]])
print("取一行", a[2])
print("取连续的多行", a[0:2], sep="\n")
print("取不连续的多行", a[[1, 3, 4]], sep='\n')

"""
输出的结果:
取一行 [4 2 2 4 3]
取连续的多行
[[1 4 4 0 1]
 [3 0 2 2 2]]
取不连续的多行
[[3 0 2 2 2]
 [4 3 0 2 2]
 [2 3 1 2 2]]"""

有关取列的代码:

a = np.array([[1, 4, 4, 0, 1],
              [3, 0, 2, 2, 2],
              [4, 2, 2, 4, 3],
              [4, 3, 0, 2, 2],
              [2, 3, 1, 2, 2]])
print("取出第一列", a[:, 0])
print("取出连续的多列", a[:, 0:3],sep='\n')
print("取出不连续的多列", a[:, [0, 2, 4]], sep="\n")

"""
输出的结果:

取出第一列 [1 3 4 4 2]
取出连续的多列
[[1 4 4]
 [3 0 2]
 [4 2 2]
 [4 3 0]
 [2 3 1]]
取出不连续的多列
[[1 4 1]
 [3 2 2]
 [4 2 3]
 [4 0 2]
 [2 1 2]]
"""

数组的翻转

import numpy as np
a = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10],
              [11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25]])
print("对行做翻转,上下翻转:", a[::-1], sep='\n')
print("对列做翻转,左右翻转:", a[:, ::-1], sep="\n")
print("整体翻转,翻转180度:", a[::-1][:, ::-1], sep='\n')

"""
对行做翻转,上下翻转:
[[21 22 23 24 25]
 [16 17 18 19 20]
 [11 12 13 14 15]
 [ 6  7  8  9 10]
 [ 1  2  3  4  5]]
对列做翻转,左右翻转:
[[ 5  4  3  2  1]
 [10  9  8  7  6]
 [15 14 13 12 11]
 [20 19 18 17 16]
 [25 24 23 22 21]]
整体翻转,翻转180度:
[[25 24 23 22 21]
 [20 19 18 17 16]
 [15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
"""

五、Numpy的一些常用函数

        1、Ndarray变形:reshape

        2、Ndarray级联:concatenate/ np.hstack/ np.vstack

        3、Ndarray拆分:np.split

        4、copy拷贝:函数创建副本

1、reshape变形

        reshape:可是使得数组变形

reshape: 当一个生成是n维的时候,可以只写n - 1个数,其中一个写成-1,则会自动计算匹配。

import numpy as np

a = np.arange(1, 21)
b1 = np.reshape(a, (4, 5))  # b1和下面的b2的结果是一样的
b2 = a.reshape((4, 5))
print("a = ", a)
print("b1 = ", b1, sep="\n")
print("b2 = ", b2, sep="\n")

"""
输出结果:
a =  [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20]
b1 = 
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]]
b2 = 
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]]
"""

2、级联

np.concatenate()

        参数是列表或元组。

        级联的数组维度必须相同。

        可以通过axis参数改变级联的方向。

np.hstack(( , )): 左右合并,左右级联

np.vstack(( , )): 上下合并,上下级联

import numpy as np

a = np.random.randint(0, 100, size=(3, 5))
b = np.random.randint(0, 100, size=(3, 5))

c = np.concatenate((a, b))  # 默认上下合并
d = np.concatenate((a, b), axis=1) #左右和并
print(c)
print(d)
# 左右合并,水平级联
c = np.hstack((a, b))  # 左右和合并
print(c)
# 上下合并,垂直级联
c = np.vstack((a, b))
print(c)

"""
输出结果:
[[72 38 36 99 74]
 [ 8 12  2 21 41]
 [19 15 65 30 88]
 [57 60 47 41 11]
 [72 60 17 31 25]
 [25 50  5 59 10]]
[[72 38 36 99 74 57 60 47 41 11]
 [ 8 12  2 21 41 72 60 17 31 25]
 [19 15 65 30 88 25 50  5 59 10]]
[[72 38 36 99 74 57 60 47 41 11]
 [ 8 12  2 21 41 72 60 17 31 25]
 [19 15 65 30 88 25 50  5 59 10]]
[[72 38 36 99 74]
 [ 8 12  2 21 41]
 [19 15 65 30 88]
 [57 60 47 41 11]
 [72 60 17 31 25]
 [25 50  5 59 10]]
"""

3、切分 / 拆分 / 分割 

与级联类似,三个函数完成切分工作:

        np.split():可以拆分行或者列,axis = 0的时候表示行,1的时候表示列默认的是按照行进行拆分。

        np.vsplit():按照垂直(拆分行)的方向拆分。

        np.hsplit():按照水平(拆分列)的反向拆分。

import numpy as np

a = np.random.randint(10, 100, (6, 5))
print("原数组 = ", a)

b = np.vsplit(a, 3)  # 这里的第2个参数,表示拆分为几份, 必须能够使得数组平均拆分
print("平均拆成3份", b)

b = np.vsplit(a, [1, 2, 4])  # 按照第第几条线拆分
print(b)

4、copy 副本/ 复制/ 拷贝

        copy() 函数创建副本。

import numpy as np

a = np.array(range(1, 11))
b = a
a[0] = 100
print(b)

# copy: 是一个深拷贝
a = np.array(range(1, 11))
b = a.copy()
a[0] = 100
print(b)

"""
输出的结果:
[100   2   3   4   5   6   7   8   9  10]
[ 1  2  3  4  5  6  7  8  9 10]
"""

六、Numpy聚合操作

np.sum:求和

np.min:最小值

np.max:最大值

np.mean:平均值

np.average:平均值

np.median:中位数

np.percentile:百分位数

np.argmin:最小值对应的下标

np.argmax:最大值对应的下标

np.std:标准差

np.var:方差

np.power:次方,求幂

np.argwhere:按条件查找

1、np.sum 求和

        当多维度的时候,可以利用axis = 0, 1...来使得行,或者列求和。

        如果当多维数组的时候不加任何属性,则求的是整个数组的和

import numpy as np

a = np.array(range(1, 11))
sun = np.sum(a)
print(sun)

# 二维数组
a = np.array([[1, 1],
              [2, 2],
              [3, 3]])
sun = np.sum(a)
print(sun)

sun = np.sum(a, axis=0)  # 当为0时,每一列的多行求和
print(sun)

sun = np.sum(a, axis=1)  # 当为1时,每一行的多列求和
print(sun)


"""
输出结果:
55
12
[6 6]
[2 4 6]
"""

2、np.min和np.max

import numpy as np

a = np.array([10, 2, 1, 100, 20])
print("最小值", np.min(a))
print("最大值", np.max(a))

print("-" * 20 + "二维数组" + '-' * 20)
a = np.array([[10, 1], [100, 2], [200, 1]])
print("原数组", a)
print("最小值", np.min(a))
print("最大值", np.max(a))
print("axis = 0:", np.max(a, axis=0))
print("axis = 1:", np.max(a, axis=1))

"""
输出结果:
最小值 1
最大值 100
--------------------二维数组--------------------
原数组 [[ 10   1]
 [100   2]
 [200   1]]
最小值 1
最大值 200
axis = 0: [200   2]
axis = 1: [ 10 100 200]
"""

3、np.mean和np.average平均值

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值