创建数组常用方式:
np.arange(n) 返回一个0到n-1的数组
np.ones(shape) shape为元组(行, 列),元素全部为1
np.zeros(shape) 元素全部为0
np.full(shape, val) 元全为val值
np.eye(n) 创建一个正方的n*n单位矩阵,对角线全为1其余为0
np.linspace(b, e, n) 根据起始值等间距的填充数据,返回数组
import numpy as np
print(np.arange(10)) # [0 1 2 3 4 5 6 7 8 9]
print(np.ones((2, 4)))
"""[[1. 1. 1. 1.]
[1. 1. 1. 1.]]"""
print(np.zeros((4, 4)))
"""
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
"""
print(np.full((3, 2), 10))
"""
[[10 10]
[10 10]
[10 10]]
"""
print(np.eye(3))
"""
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
"""
print(np.linspace(1, 3, 10))
"""
[1. 1.22222222 1.44444444 1.66666667 1.88888889 2.11111111
2.33333333 2.55555556 2.77777778 3. ]
"""
获取数组对象的属性
dim 获取维度
shape 获取数组的行数,列数
size 获取元素的个数,即: 行 * 列
dtype 元素的类型
import numpy as np
n = np.array([[1, 2, 3, 4], [6, 7, 8, 9]])
print(n.ndim) # 2
print(n.shape) # (2, 4)
print(n.size) # 8
print(n.dtype) # int32
genfromtxt函数
传入的参数为:要打开的文档名称,分隔符,编码格式,以什么类型存储
import numpy as np
tmp = np.genfromtxt("1.txt", delimiter=",",encoding="UTF-8", dtype=str)
print(tmp)
""" ['核桃核' '不能吞下去' '核桃核太大了,吞下去容易噎着'] """
== 运算
import numpy as np
a = np.array([5, 10, 15, 20])
equal_to_ten = (a == 10)
print(a[equal_to_ten]) # [10]
&, | 运算
import numpy as np
a = np.array([3, 5, 7, 9])
equal_to_ten_or_five = (a == 3) | (a == 7)
print(a[equal_to_ten_or_five]) # [3 7]
astype函数,将矩阵中的元素都修改成指定的类型
import numpy as np
a = np.array([3, 5, 7, 9])
print(a.dtype) # int32
a = a.astype(str)
print(a.dtype) # <U11
Numpy库常用的统计函数
函数名 | 函数说明 |
---|---|
min(axis) | 得出矩阵中的最小值 ,axis=0,表示按列计算,axis=1: 表示按行计算 |
max(axis) | 得出矩阵中的最大值 ,axis=0,表示按列计算,axis=1: 表示按行计算 |
sum(axis) | 得出矩阵中的元素的和值 ,axis=0,表示按列计算,axis=1: 表示按行计算,不指定代表所有元素和 |
mean(a,axis=None) | 计算期望值 |
average(a,axis=None,weights=None) | 计算加权平均值 |
std(a,axis=None) | 计算标准差 |
var(a,axis=None) | 计算方差 |
ptp(a) | 计算最大值和最小值的差值 |
median(a) | 计算中位数 |
例如:
import numpy as np
a = np.array([[3, 5, 7, 9],[10, 11, 12, 13]])
print(a.sum()) # 70
print(a.sum(axis=1)) # [24 46] 行
print(a.sum(axis=0)) # [13 16 19 22] 列
print(a.min(axis=1)) # [ 3 10] 行
print(a.min(axis=0)) # [3 5 7 9] 列
数组运算
Numpy库的随机数函数
矩阵的运算
import numpy as np
a = np.array([[1, 1],[0,1]])
b = np.array([[2, 0],[3, 4]])
print(a * b) # 对应元素相乘
"""
[[2 0]
[0 4]]
"""
print(a.dot(b)) # 矩阵算法
"""
[[5 4]
[3 4]]
"""
ravel()函数
将矩阵转成一行n*m的一维矩阵
import numpy as np
a = np.array([[1, 1], [0, 1], [3, 4]])
print(a.ravel()) # [1 1 0 1 3 4]
print(a.T) # 转置
"""
[[1 0 3]
[1 1 4]]
"""
print(a.reshape(6, -1)) # eshape只要有一个参数确定,另一个参数就确定了,所以另一个参数如果你懒得算,直接写-1,python会自动计算另一个维度是多少
hstack()与vstack(): 将两个矩阵进行拼接
hstack() 两个矩阵横着拼接
vstack() 两个矩阵竖着拼接
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.hstack((a, b)))
"""[[1 2 5 6]
[3 4 7 8]]"""
print(np.vstack((a, b)))
"""[[1 2]
[3 4]
[5 6]
[7 8]]"""
hsplit()和vsplit()函数: 将矩阵进行分割
import numpy as np
a = np.array([[1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12 ,13, 14, 15, 16]])
print(np.hsplit(a, 4))
print(np.hsplit(a, (3, 4)))
print(np.vsplit(a, 2))
矩阵的复制
其实就是python赋值的引用
import numpy as np
a = np.arange(8)
b = a
b.shape = 2, 4
print(a.shape) # (2, 4)
print(id(a)) # 2197209465600
print(id(b)) # 2197209465600
使用View()的方式进行复制,其实是个浅复制,当修改副本矩阵的元素时,原矩阵相应位置元素也会改变.
import numpy as np
a = np.arange(8)
# view()的方式复制
b = a.view()
b.shape = 2, 4
b[0, 0] = 9
print(a[:1]) # 9
使用copy()方式进行复制,当修改副本矩阵的元素时,原矩阵相应位置元素不会改变.
import numpy as np
a = np.arange(8)
# copy的方式复制
b = a.copy()
b.shape = 2, 4
b[0, 0] = 9
print(a[:1]) # 0
argmax()函数获取矩阵最大值的下标,argmax(axis=0)表示按列寻找,argmax(axis=1)表示按行寻找
import numpy as np
a = np.arange(8)
print(a.argmax()) # 7
tile()函数 tile(data,(n,m)),将data矩阵扩展n行m列个
import numpy as np
a = np.arange(10, 40, 20)
print(np.tile(a, (2, 2)))
sort()函数
import numpy as np
a = np.array([[1, 7, 5],[1, 2, 1]])
b = np.sort(a, axis=1)
print(b)