python的numpy库使用详解

        本章介绍python是数组库——numpy的使用。numpy数组对于表格的学习具有很重要的作用,特别是pandas,学好numpy,为pandas打好基础。

目录

1.  创建数组

        (1)np.array()

        (2)np.arange()

2.  创建多维数组

        (1)创建二维数组

        (3)创建多维数组

3.  创建特殊数组

        (1)np.ones()

        (2)np.zeros()

        (3)np.full()

        (4)np.eye()

        (5)np.diag()

4.  数组模板创建数组

        (1)np.ones_like()

        (2)np.zeros_like()

        (3)np.full_like()

5.  数组的属性

6.  numpy中的 random随机库

        (1)随机数生成

        (2)np.random.choice()

        (3)np.random.shuffle()

        (4)np.random.permutation()

7.  数组维度/形状的转换/转置

        (1)arr.reshape()

        (2)arr.flatten()

        (3)arr.T  或  arr.transpose()   二维数组转置

8.  数组的运算

        (1)数组和数字之间的加减乘除

        (2)数组与数组之间的加减乘除(形状一样 个案对位)

        (3)数组与数组之间的加减乘除(形状不一样 但行/列对位)

9.  数据选取/数据切片

        (1)一维数组

        (2)二维数组

10.  神奇索引

        (1)一维

        (2)二维

                ① 取行

                ② 取列

                ③ 对位取值

11.  数组元素的筛选/条件统计

        (1)筛选出符合条件的值

        (2)统计出符合条件的数的个数

        (3)多条件筛选

12.  更改元素的值

        (1)全局更改

        (2)局部更改(二次切片)

        (3)np.where()  条件更改

13.  轴与数组元素的排序

        (1)arr.sort(axis=1) 排序

        (2)arr.argsort()   排序对应的索引位置

        (3)arr.argmax()  最大值所在的索引位置

        (4)arr.argmin()  最小值所在的索引位置

        (5)np.maximum()、np.minimum()  同位数比较取值

14.  轴与数组的加法/乘法

        (1)一维

        (2)二维

15.  轴与数组的累计加法/累计乘法

        (1)一维

        (2)二维

16.  索引量统计 np.bincount()

17.  数组合并

        (1)np.vstack()  纵向合并

        (2)np.hstack()  横向合并

        (3)np.concatenate()  纵向/横向合并

18.  数组拆分

        (1)np.hsplit()

        (2)np.vsplit()

        (3)np.split()

19.关于数学和统计的其他函数

20.  any()和all()

21.  np.unique()  去重

22.  np.in1d()  共同元素判断

23.  浅拷贝与深拷贝

        (1)浅拷贝

        (2)深拷贝

        (3)对比浅拷贝与深拷贝

结尾


1.  创建数组

        (1)np.array()

array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0,like=None)

object:一个序列,可为列表或者元组。

dtype:numpy内部数据类型,可以把数据转换为整数或者浮点数,可以选择int,int32,int64,float,float32,float64等。

copy:复制object序列,默认为True。当object是数组时,复制副本就不会影响原数组。

order:创建数组的布局形式。

subok:默认为False。是否使用内部数组类型。

ndmin:指定数组的维度。

like:创建维度像xxx一样数组。

        直接创建数组,可以键入列表、元组。用的最多的参数只有前两个。

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr)
print(type(arr))
print(arr.dtype)

        传入元组也可以,自己动手试试。数组在 "外观" 上的不同在于列表是用逗号隔开,而数组是用空格隔开;在本质上的不同在于数组是一组同类数据的组合(全是数字或者全是字符串),而列表可以为不同类别。

        加入同时传入数字和字符串,那么该数组的格式数据类型为字符串。如:

arr = np.array([1,2,'大',4,5])
print(arr)
print(type(arr))
print(arr.dtype)

        type()函数是python的内置函数,用于判断整个变量是什么数据类型;arr.dtype是numpy的函数,用于判断数组中的数据属于什么数据类型。

        (2)np.arange()

arange(start, stop, step, dtype=None, *, like=None)     连续范围创建。

start:开始(包含)。

stop:结束(不包含)。

step:步长(间距)。

dtype:numpy内部数据类型。

like:创建维度像xxx一样数组。

arr = np.arange(1,9)
# arr = np.array([1,2,3,4,5,6,7,8,9])      # 一样
# arr = np.array(range(1,9))        # 一样
print(arr)

arr_2 = np.arange(1,9,2)
print(arr_2)

2.  创建多维数组

        (1)创建二维数组

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

        二维可以理解为一个平面,也可以理解为一个几行几列的表格。

        (3)创建多维数组

arr = np.array([[[1,2,3,4],[5,6,7,8]],
                [[10,11,12,13],[14,15,16,17]]])
print(arr)

        该例子为创建三维数组,就是多个平面(二维)叠加嘛。

3.  创建特殊数组

        (1)np.ones()

np.ones(shape, dtype=None, order='C', *, like=None)    创建一个shape形状的全是1的数组。

shape:形状,几行几列。

arr = np.ones([2,3])
print(arr)

        如果想得到整数,可设置数组数据类型:

arr = np.ones([2,3],dtype='int32')
print(arr)

        创建一个2行3列的1数组。

        (2)np.zeros()

arr = np.zeros([2,3])
print(arr)

        创建一个2行3列的零数组。

        (3)np.full()

np.full(shape, fill_value, dtype=None, order='C', *, like=None)    创建一个shape形状的全是特定值的数组。
arr = np.full([2,3],520)
print(arr)

        创建一个指定形状指定数值的数组。

        (4)np.eye()

        np.eye(N, k=0, dtype=<class 'float'>)  创建对角线为1,其余为0的数组。

N:数组的规模 形状 几行几列(行数=列数)

k:哪条边全是1?对角线上下方(+ -)第k条线全是1,其余全是0。

dtype:内部数据类型。

a = np.eye(N=3,k=0)
print(a)
print('-'*35)

b = np.eye(N=3,k=1)
print(b)

        如图,N=3则3行3列;k=0则是对角线全是1,其余全是0;k=1则是对角线上方第k条线全是1,其余全是0;k=-1则是对角线下方第k条线全是1,其余全是0......

        (5)np.diag()

        np.diag(a, k=0)   生成对角线元素是a的数组。

a:可以是一个列表、元组等。

k:哪条边全是1?对角线上下方(+ -)第k条线的元素是a,其余全是0。

a = [1,2,3]

b = np.diag(a)
print(b)

        再如 k=1 (对角线上方第1条线的元素是a,其余全是0):

a = (1,2,3)

b = np.diag(a,k=1)
print(b)

4.  数组模板创建数组

        (1)np.ones_like()

np.ones_like(a, dtype=None, order='K', subok=True, shape=None)    以一个数组为模板,创建一个和它形状一样,值是1的数组。
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print('-'*70)

a = np.ones_like(arr)
print(a)

        此案例以arr数组为模板,创建一个形状像arr的,数值全是one即1的数组。

        (2)np.zeros_like()

np.zeros_like(a, dtype=None, order='K', subok=True, shape=None)    以一个数组为模板,创建一个和它形状一样,值是0的数组。
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print('-'*70)

a = np.zeros_like(arr)
print(a)

        (3)np.full_like()

np.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None)   以一个数组为模板,创建一个和它形状一样,值是指定数值的数组。
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print('-'*70)

a = np.full_like(arr,520)
print(a)

5.  数组的属性

arr.shape 返回一个数组的形状,即几行几列。
arr.size 返回一个数组中所有数据元素的数目。
arr.ndim 返回数据是几维的。
arr = np.array([[[1,2,3,4],[5,6,7,8]],
                [[10,11,12,13],[14,15,16,17]]])
print(arr)
print('-'*70)
print(arr.shape)
print(arr.size)
print(arr.ndim)

        可见该三维数组是由2个平面,每个平面由2行,每行由4个元素组成的。元素总数是16个。是三维数组。

6.  numpy中的 random随机库

        (1)随机数生成

np.random.randint(low, high=None, size=None, dtype=int)

low:最小值(包括)。

high:最大值(不包括)。

size:数量,形状等

dtype:数据类型。

ran = np.random.randint(1,51,(2,3))
print(ran)

        通过随机数创建一个2行3列的数组。numpy中的随机数有点在于可以设置数组的形状(几行几列等),而随机数库random一次只能得到一个。

        其他随机数函数的用法和 random库的用法是一样的,可以在random库了解更多random的函数。需要注意的是,在random库中,是包括左右边界的;而在np.random中是不包括右边界的。

        (2)np.random.choice()

        np.random.choice(a,size)    在a中随机选取size数量的元素,元素之间有可能重复。a可以为一个数,也可以是一个列表。若是一个数,则表示为 range(0,a)。

a = np.random.choice(10,(3,2))
print(a)

        (3)np.random.shuffle()

        np.random.shuffle(a)    洗牌,把数组a随机打乱。注意该函数是直接作用于a的,如果重新定义变量,得到的会是None。如果想赋给新变量,可以使用 np.random.permutation函数。

a = np.random.choice(10,(3,2))
print(a)
print('-'*50)

np.random.shuffle(a)
print(a)

        知识点:一维打乱元素,二维只打乱行的顺序,三维只打乱块的顺序。大家也可以亲自去试试。

        (4)np.random.permutation()

        np.random.permutation(a)   作用和 np.random.shuffle(a)一样,但该函数可以对洗牌后的数组赋予新变量,使原数组不发生改变。

a = np.random.choice(10,(3,2))
print(a)
print('-'*50)

b = np.random.shuffle(a)         # 无法赋予给新变量b,若赋予,会得到None
print(b)
print('-'*50)

c = np.random.permutation(a)     # 可以赋予给新变量c
print(c)

        shuffle 和 permutation 的区别在于:前者是在原来是数组上打乱;后者是新定义一个变量(如c),使新变量改变,而原数组不变。

7.  数组维度/形状的转换/转置

        (1)arr.reshape()

arr.reshape(shape, order='C')     把数组转换为shape形状。
arr = np.arange(1,25)
print
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值