Numpy
文章目录
- Numpy
- 一、如何使用Numpy
- 1. 导入Numpy
- 2. 创建数组函数
- 3. 关于数组的一些操作
- 数组的相关信息
- 数据类型
- 生成全部为0的数组
- 生成全部为1的数组(类似于0)
- 生成一个有序的数组
- 规定数组的形状
- 将数组分段
- 4.numpy的基础运算
- 一维数组的加减乘除
- 判断
- 二维数组相乘
- 一些函数
- 5. numpy的索引
- 一维数组索引
- 二维矩阵索引
- 行数的索引
- 行、列的索引
- 每一行分别输出
- 每一列分别输出
- 每一项分别输出
- 6. 数组合并
- 上下合并
- 左右合并
- 横、纵向合并
- 7. 数组分割
- 横向分割
- 纵向组合
- 纵向组合
一、如何使用Numpy
1. 导入Numpy
import numpy as np
2. 创建数组函数
通过Numpy中库中的array函数可以创建ndarray数组。
Numpy库可将数据转换为ndarray数组。
np.array()
import numpy as np
a = np.array([1,2,3])
这样就创造了一个一维数组
import numpy as np
a = np.array([[1,2,3],[3,4,5]])
这样就创造了一个二维数组
3. 关于数组的一些操作
数组的相关信息
import numpy as np
a = np.array([[1,2,3],[3,4,5]])
print(a)
print(a.ndim) #输出数组的维度
print(a.shape) #输出数组的形状(行数、列数)
print(a.size) #输出数组总共的元素数量
输出结果如下:
[[1 2 3]
[3 4 5]]
2
(2,3) #两行三列
6
数据类型
使用方法为:
a = np.array([1,2,3],dtype=) #dtype后填数据类型
生成全部为0的数组
a = np.zeros()
括号里可以填自己想生成几行几列的0,但必须用括号括起来,如下:
a = np.zeros((3,4))
这样就会得到一个三行四列的全为0的数组。
生成全部为1的数组(类似于0)
a = np.ones()
生成一个有序的数组
a = np.arange(n)
这样就会生成一个从0到n-1的一维数组。
还可以定义其步长:
a = np.arange(10,20,2)
规定数组的形状
用reshape函数
a = np.arange(12).reshape((3,4))
print(a)
输出结果如下:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
将数组分段
a = np.linspace(1, 10, 5)
#从1开始,到10结束,平均分成4段
这个也可以规定形状。
4.numpy的基础运算
一维数组的加减乘除
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
c = a - b
print(a)
print(b)
print(c)
得到的结果如下:
[10 20 30 40]
[0 1 2 3]
[10 19 28 37]
容易看出,numpy中两个数组相减,是挨个对应相减,加、乘、除也是。
判断
import numpy as np
a = np.array([10,20,30,40])
b = np.arange(4)
print(b<3)
运行结果如下:
[ True True True False]
得到的是布尔类型的数据。
二维数组相乘
import numpy as np
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
c = a * b
c1 = np.dot(a,b) #也可写成 a.dot(b)
print(c)
print(c1)
运行结果如下:
#挨个对应相乘
[[0 1]
[0 3]]
#矩阵的乘法
[[2 4]
[2 3]]
一些函数
函数名称 | 函数作用 |
np.sum(a,axis=)或a.sum() | 求数组a里的数字之和,axis=1则是分别求每一行的总和,axis=0则是分别求每一列的总和 |
np.min(a)或a.min() | 求数组a里的最小值,也可以加入axis参数 |
np.max(a)或a.max() | 求数组a里的最大值,自然也可以用axis参数 |
np.argmin(a)或a.argmin() | 找a中最小值的索引值 |
np.argmax(a)或a.argmax() | 找a中最大值的索引值 |
np.mean(a)或a.mean() | 计算a中元素的平均值 |
np.average(a) | 计算a中元素的平均值 |
np.median(a) | 找a中的中位数 |
np.cumsum(a) | 前缀和 |
np.diff(a) | 后一个数减前一个数,b1 = a2 - a1,b2= a3 - a2… |
np.sort(a) | 给a排序 |
np.transpose(a)或a.T | 矩阵的转置 |
np.clip(a,a_min,a_max) | 保留a_min与a_max中间的数,小于a_min的变成a_min,大于a_max的变成a_max |
5. numpy的索引
一维数组索引
import numpy as np
a = np.arange(3,15)
print(a[3])
输出结果为:
6
二维矩阵索引
行数的索引
import numpy as np
a = np.arange(3,15).reshape((3,4))
print(a[2])
输出结果为:
[11 12 13 14]
此时索引的是行数。
行、列的索引
import numpy as np
a = np.arange(3,15).reshape((3,4))
print(a[1][1]) #也可以这样写 a[1,1],前面为行,后面为列
输出结果为:
8
此时对行和列索引。
每一行分别输出
import numpy as np
a = np.arange(3,15).reshape((3,4))
for row in a:
print(row)
输出结果为:
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
每一列分别输出
import numpy as np
a = np.arange(3,15).reshape((3,4))
for column in a.T: #由于不可以直接将每一列输出,所以要先将矩阵转置
print(column)
输出结果为:
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
每一项分别输出
import numpy as np
a = np.arange(3,15).reshape((3,4))
for item in a.flat: #先将二维数组转换为一维数组,再逐个输出
print(item)
输出结果为:
3
4
5
6
7
8
9
10
11
12
13
14
6. 数组合并
上下合并
import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b))) #vertical stack
输出结果为:
[[1 1 1]
[2 2 2]]
左右合并
import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.hstack((a,b))) #horizontal stack
输出结果为:
[1 1 1 2 2 2]
横、纵向合并
还可以用np.concatenate((a,b,…),axis=):
axis=0的时候为纵向相加,axis=1的时候为横向相加。
特别注意:如果是一维数组,当axis=1的时候会报错。
一维:
import numpy as np
a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.concatenate((a,b),axis=0))
输出结果为:
[1 1 1 2 2 2]
二维纵向:
import numpy as np
a = np.array([1,1,1]).reshape((3,1))
b = np.array([2,2,2]).reshape((3,1))
print(np.concatenate((a,b),axis=0))
输出结果为:
[[1]
[1]
[1]
[2]
[2]
[2]]
二维横向:
import numpy as np
a = np.array([1,1,1]).reshape((3,1))
b = np.array([2,2,2]).reshape((3,1))
print(np.concatenate((a,b),axis=1))
输出结果为:
[[1 2]
[1 2]
[1 2]]
7. 数组分割
横向分割
import numpy as np
a = np.arange(16).reshape((4,4))
print(np.hsplit(a,2)) #数字的意思是分成几份(平均分)
输出结果为:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]),
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
纵向组合
import numpy as np
a = np.arange(16).reshape((4,4))
print(np.vsplit(a,2))
输出结果为:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]),
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
import numpy as np
a = np.arange(16).reshape((4,4))
print(np.hsplit(a,2)) #数字的意思是分成几份(平均分)
输出结果为:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]),
array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
纵向组合
import numpy as np
a = np.arange(16).reshape((4,4))
print(np.vsplit(a,2))
输出结果为:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]),
array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
类似的,可以用split实现指定方向的分割,需设定axis的值。