一、学习前的准备
导入numpy库
import numpy as np
二、numpy原生数组的创建
1、np.array()
array():创建一个数组
2、np.eye()
eye(N,M,K):创建一个对角线为1的二维数组
N:为输出的行数
M:为输出的列数,默认与N相同
K:可以理解为数值为1的对角线的偏移量,k为正,则向右移动,为负,则向左移动
3、np.zeros()
- zeros():创建一个用指定形状用0填充的数组。
zeros(shape, dtype=float, order=‘C’)
shape:形状,也就是几行几列的数组
dtype:可选参数,数据类型,默认numpy.float64
order:可选参数,c代表与c语言类似,行优先;F代表列优先
4、np.ones()
- ones():将创建一个用指定形状用1填充的数组
与ones用法类似
5、np.arrange()
- arrange():创建一具有有规律递增值的数组
arrange()内的常见参数有三种情况(也可以加dtype参数):
1)一个参数时,参数值为终点,起点取默认值0,步长取默认值1。
2)两个参数时,第一个参数为起点,第二个参数为终点,步长取默认值1。
3)三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长。其中步长支持小数。
6、np.linspace()
- linspace():将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)此为默认值
1、将区间[start, stop]分成等间隔的num个数(包含start和stop两个数),并返回它们组成的数组;
2、若endpoint=False,就将区间[start, stop]分成等间隔的num+1个数,但返回的数组中不包括‘stop’项;
3、若retstep=True,返回值格式为 (数组部分, 间隔长度),即在原有数组部分的基础上,加上间隔长度的数据;
4、 dtype决定输出数组的数据类型,若是未指定,则根据输入参数决定。
5、 axis在二维数组上面有着一定的作用
7、np.indices()
- indices():创建一组数组(堆积为一个更高的数组),每个维度一个,每个维度表示该维度中的变化。
示例:
# -*- coding: UTF-8 -*- """ @Author :远方的星 @Time : 2021/5/1 11:01 @CSDN :https://blog.csdn.net/qq_44921056 @腾讯云 : https://cloud.tencent.com/developer/column/91164 """ import numpy as np print('---------------narry的例子--------------------') print(np.array([5, 2.1, 'love', 'M'])) print('---------------eye默认情况--------------------') print(np.eye(4)) print('---------------eye中参数M与N不一致------------') print(np.eye(4, 3)) print('---------------eye中参数K为正数---------------') print(np.eye(4, k=1)) print('---------------eye中参数K为负数---------------') print(np.eye(4, k=-1)) print('---------------zeros中dtype取默认值-----------') print(np.zeros((2, 3))) print('---------------zeros中dtpye取int--------------') print(np.zeros((2, 3), dtype=int)) print('---------------ones的一个小例子---------------') print(np.ones((2, 3))) print('---------------arrange不加入dtype参数---------') print(np.arange(2, 10, 2)) print('---------------arrange加入dtype参数-----------') print(np.arange(2, 10, 2, dtype=float)) # 这里更规范可以写成np.float print('---------------linspace的例子-----------------') print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=False, dtype=None, axis=0)) print('---------------linspace中参数endpoint=False---') print(np.linspace(start=1, stop=3, num=5, endpoint=False, retstep=False, dtype=None, axis=0)) print('---------------linspace中参数retstep=True-----') print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=True, dtype=None, axis=0)) print('---------------linspace中dtype参数------------') print(np.linspace(start=1, stop=3, num=5, endpoint=True, retstep=False, dtype=float, axis=0)) print('---------------indices的第一个例子------------') print(np.indices((3, 4))) print('---------------indices的第2个例子------------') print(np.indices((6, 5), dtype=float))
输出:
---------------narry的例子-------------------- ['5' '2.1' 'love' 'M'] ---------------eye默认情况-------------------- [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] ---------------eye中参数M与N不一致------------ [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [0. 0. 0.]] ---------------eye中参数K为正数--------------- [[0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.] [0. 0. 0. 0.]] ---------------eye中参数K为负数--------------- [[0. 0. 0. 0.] [1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.]] ---------------zeros中dtype取默认值----------- [[0. 0. 0.] [0. 0. 0.]] ---------------zeros中dtpye取int-------------- [[0 0 0] [0 0 0]] ---------------ones的一个小例子--------------- [[1. 1. 1.] [1. 1. 1.]] ---------------arrange不加入dtype参数--------- [2 4 6 8] ---------------arrange加入dtype参数----------- [2. 4. 6. 8.] ---------------linspace的例子----------------- [1. 1.5 2. 2.5 3. ] ---------------linspace中参数endpoint=False--- [1. 1.4 1.8 2.2 2.6] ---------------linspace中参数retstep=True----- (array([1. , 1.5, 2. , 2.5, 3. ]), 0.5) ---------------linspace中dtype参数------------ [1. 1.5 2. 2.5 3. ] ---------------indices的第一个例子------------ [[[0 0 0 0] [1 1 1 1] [2 2 2 2]] [[0 1 2 3] [0 1 2 3] [0 1 2 3]]] ---------------indices的第2个例子------------ [[[0. 0. 0. 0. 0.] [1. 1. 1. 1. 1.] [2. 2. 2. 2. 2.] [3. 3. 3. 3. 3.] [4. 4. 4. 4. 4.] [5. 5. 5. 5. 5.]] [[0. 1. 2. 3. 4.] [0. 1. 2. 3. 4.] [0. 1. 2. 3. 4.] [0. 1. 2. 3. 4.] [0. 1. 2. 3. 4.] [0. 1. 2. 3. 4.]]]
三、一些操作
a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) c = np.eye(4) d = np.array([False, True, True, False, True]) e = np.array([False, False, False, True, True]) print(a) print(b) print(c) print(d) print(e)
输出:
[1 2 3 4] # a [5 6 7 8] # b [[1. 0. 0. 0.] # c [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] [False True True False True] # d [False False False True True] # e
注:以下操作以此为基础
1、获取数值、修改数值
print('--------读取a索引值为1的数值-------') print(a[3]) print('--------读取c第二行的数值----------') print(c[1]) print('--------读取c第三列的数值----------') print(c[:, 2]) print('--------读取c第一行第一列的数值----') print(c[0, 0]) print('--------修改c第一行第一列的数值----') c[0, 0] = 2 print(c)
输出:
--------读取a索引值为1的数值------- 4 --------读取c第二行的数值---------- [0. 1. 0. 0.] --------读取c第三列的数值---------- [0. 0. 1. 0.] --------读取c第一行第一列的数值---- 1.0 --------修改c第一行第一列的数值---- [[2. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]
2、查看维度、维度的长度、数组元素类型
print('-----------查看a和c的维度-------') print(a.ndim) print(c.ndim) print('-----------查看a和c的各维度长度--') # 第一个是行,第二个是列 print(a.shape) print(c.shape) print('-----------查看a、e数组元素类型--') print(a.dtype) print(d.dtype)
输出:
-----------查看a和c的维度------- 1 2 -----------查看a和c的各维度长度-- (4,) (4, 4) -----------查看数组元素类型------ int32 bool
3、四则运算及逻辑运算
print('-----------a与b相加------') print(b+a) print('-----------a与b相减------') print(b-a) print('-----------a与b相乘------') print(b*a) print('-----------a与b相除------') print(b/a) print('-----------d与e相与------') print(np.logical_and(d, e)) print('-----------d与e相或------') print(np.logical_or(d, e)) print('-----------d取非---------') print(np.logical_not(d)) print('-----------d与e异或------') print(np.logical_xor(d, e))
输出:
-----------a与b相加------ [ 6 8 10 12] -----------a与b相减------ [4 4 4 4] -----------a与b相乘------ [ 5 12 21 32] -----------a与b相除------ [5. 3. 2.33333333 2. ] -----------d与e相与------ [False False False False True] -----------d与e相或------ [False True True True True] -----------d与e非-------- [ True False False True False] -----------d与e异或------ [False True True True False]
4、reshape:更改数组形状
# 将一行四列的数组改为两行两列的数组 print(a.reshape(2, 2))
输出:
[[1 2] [3 4]]
- 当reshape中的数字为负数时,则代表未指定具体要求,可用来只获得行或列
print('---------只获得列------') print(a.reshape(-1, 1)) print('---------只获得行------') print(a.reshape(1, -2))
输出:
---------只获得列------ [[1] [2] [3] [4]] ---------只获得行------ [[1 2 3 4]]
5、索引及其一些切片操作
首先,可以来认识一下索引,索引分为正索引和负索引,下面是一个数组,正负索引相对应的图解基本切片语法是 i:j:k,其中 i 是起始索引,j 是停止索引,k 是步骤(k默认为1),且a[i,j]是可以理解为左闭右开的。
- ①以一维数组a为例
print('----------从索引值0到索引值1的结果------------') print(a[0: 2]) print('----------从索引值0到索引值2的结果------------') print(a[: 3]) print('----------从索引值0到索引值2增长的步长为2------') print(a[0: 3: 2]) print('----------从索引值-1到索引值-2的结果-----------') print(a[-1: -3]) print('----------从索引值1到索引值-2的结果------------') print(a[1: -1])
输出:
----------从索引值0到索引值1的结果------------ [1 2] ----------从索引值0到索引值2的结果------------ [1 2 3] ----------从索引值0到索引值2增长的步长为2------ [1 3] ----------从索引值-1到索引值-2的结果----------- [] ----------从索引值1到索引值-2的结果------------ [2 3]
注意:有一个结果为空,所以,索引是不能以负索引为起始索引。
- ②以二维数组c为例
print('----------对应图中的红色区域部分-------------') print(c[1, 2:4]) print('----------对应图中的蓝色区域部分-------------') print(c[2:4, 0:2]) print('----------对应图中的绿色区域部分-------------') print(c[0, :])
输出:
----------从索引值0到索引值1的结果------------ [0. 0.] ----------从索引值0到索引值1的结果------------ [[0. 0.] [0. 0.]] ----------从索引值0到索引值1的结果------------ [1. 0. 0. 0.]
四、参考:
五、Blogger’s speech
如有不足,还请大佬评论区留言或私信我,我会进行补充。
感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。