python Numpy基础知识 |
Numpy基础知识
创建数组
直接创建数组
# 创建简单的列表
a = [1, 2, 3, 4]
# 将列表转换为数组
b = np.array(b)
快速创建N维数组的API
创建10行10列的数值为浮点1的矩阵
array_one = np.ones([10, 10])
创建10行10列的数值为浮点0的矩阵
array_zero = np.zeros([10, 10])
创建等差数组
np.arange(1,15,2)
从1开始,15个数,步长是2
创建正态分布的随机数组
np.random.normal(2,3,size=(4,4))
均值为2,标准差为3
创建标准正态随机数组
np.random.randn(4,4)
4x4的均值为0,标准差为1
生成随机整数组
np.random.randint(0,10,size=(3,4))
3x4的整数组,下限是0,上限是10
读取数据
从csv文件中读取
data=np.genfromtxt("./data.csv",delimiter=",")
索引和切片
基本的索引和切片
numpy中数组切片是原始数组的视图
arr = np.arange(10)
arr[5]
# 5
arr[5:8]
#array([5, 6, 7])
arr[5:8]=12
t = arr[5:8]
t[1] = 12345
arr
#array([ 0, 1, 2, 3, 4, 12, 12345, 12, 8, 9])
复制数组
t1 = arr[5:8].copy()
t1[2] = -222
arr
#array([ 0, 1, 2, 3, 4, 64, 64, 64, 8, 9])
多维数组索引
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2d[0,2]
#3
arr2d[:2,1:]
#array([[2, 3],
# [5, 6]])
布尔型索引
names == 'Bob'
names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe'])
data = np.random.randn(7,4)
names == 'Bob'
#array([ True, False, False, True, False, False, False], dtype=bool)
data[names=='Bob']
#array([[ 0.75323688, 0.85622553, -2.71974541, 0.37865467],
# [ 1.35356641, 0.09263267, 1.96207471, -0.05549953]])
data[(names=='Bob')| (names=='Will')]
花式索引
用数组进行索引
arr[[4,3,0,6]]
arr = np.empty((8,4))
for i in range(8):
arr[i] = i
arr[[4,3,0,6]]
#索引第,4,3,0,6行,结果是
array([
[ 4., 4., 4., 4.],
[ 3., 3., 3., 3.],
[ 0., 0., 0., 0.],
[ 6., 6., 6., 6.]])
用负数索引倒数第x行
arr[[-3,-5,-7]]
索引第几行第几个,每行选一个
arr[[1,5,7,2],[0,3,1,2]]
所以第几行,再索引被选出所有行的列
arr[[1,5,7,2]][:,[0,3,1,2]]
数组函数
查看数组属性
查看元素个数
b.size
查看数组形状
b.shape
查看数组维度
b.ndim
查看元素个数
b.dtype
通用函数
一元函数
abs,sqrt,square,exp,log
arr = np.arange(10)
np.sqrt(arr)
#将数据平方
二元函数
maximum、minimum
x = np.random.randn(8)
y = np.random.randn(8)
np.maximum(x,y)
#取两个数组最大值
where函数
where函数,三个参数,条件,条件为真时选择值的数组,条件为假时选择值的数组
xarr = np.array([1.1,1.2,1.3,1.4,1.5])
yarr = np.array([2.1,2.2,2.3,2.4,2.5])
cond = np.array([True,False,True,True,False])
np.where(cond,xarr,yarr)
直接指定条件选择后的结果
np.where(xarr>1.2,2,-2)
统计函数
amax、amin、mean、std ...
arr = np.random.randn(5,4)
arr.mean()
np.mean(arr)
表计算函数
cumsum(累加值计算)
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr.cumsum(0)
#array([[ 1, 2, 3],
[ 5, 7, 9],
[12, 15, 18]])
cumprod(累积值计算)
arr.cumprod(1)
#array([[ 1, 2, 6],
[ 4, 20, 120],
[ 7, 56, 504]])
axis参数
arr.mean(axis=1)行操作
arr.mean(axis=1)列操作
排序函数
arr.sort()
集合运算函数
np.unique(arr)
返回arr的唯一值
intersect1d(x,y)
返回x,y的交集
union1d(x,y)
返回x,y的并集
setdiff1d(x,y)
返回在x中,不在y中的值
线性代数
np.dot(x,y)
矩阵乘积
高级方法
from numpy.linalg import inv,det,eig,qr,svd
int(t)
逆矩阵
det(t)
行列式
qr(t)
qr分解
svd(t)
svd分解
eig(t)
求特征值和特征向量
矩阵拼接
垂直拼接np.vstack
print("v1为:")
v1 = [[0, 1, 2, 3, 4, 5],
[6, 7, 8, 9, 10, 11]]
print(v1)
print("v2为:")
v2 = [[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]
print(v2)
# 垂直拼接
result = np.vstack((v1, v2))
print("v1和v2垂直拼接的结果为")
print(result)
水平拼接np.hstack
print("v1为:")
v1 = [[0, 1, 2, 3, 4, 5],
[6, 7, 8, 9, 10, 11]]
print(v1)
print("v2为:")
v2 = [[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]]
print(v2)
# 垂直拼接
result = np.hstack((v1, v2))
print("v1和v2水平拼接的结果为")
print(result)
Numpy计算
矩阵运算
矩阵乘法
np.dot
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
# 平时成绩占40% 期末成绩占60%, 计算结果
q = np.array([[0.4], [0.6]])
result = np.dot(stus_score, q)
print("最终结果为:")
print(result)
数组与数的运算
把第一列+5
stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
print("加分前:")
print(stus_score)
# 为所有平时成绩都加5分
stus_score[:, 0] = stus_score[:, 0]+5
print("加分后:")
print(stus_score)
数组间运算
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
c = a + b
d = a - b
e = a * b
f = a / b
print("a+b为", c)
print("a-b为", d)
print("a*b为", e)
print("a/b为", f)
数组转置
data.T