Python整理:numpy库(一)

一、numpy简介(numerical python)

numpy包含:一个强大的n维数组对象ndarray、强大的广播功能、线性代数、随机数生成

二、一维数组

1. np.array()

n维数组对象ndarray: 一系列同类型的数据集合,0开始索引

import numpy as np
values = [1,2,3,4]
C = np.array(values)
print(C) # 注意:array没有逗号,list有逗号

np.array可以当作整体处理,避免使用for循环

print(C*9/5+32)

2. np.arange()

# np.arange([start,]stop[,step],[dtype = None])
np.arange(1,10)
# start默认为0,stop取不到

3. np.linspace()

语法:注意默认可以取到stop
np.linspace(
    start,
    stop,
    num=50,
    endpoint=True,
    retstep=False, # retstep返回相邻值差额
    dtype=None,
    axis=0,
)

x = np.linspace(0.5, 25, 10) # 默认可以取到start与stop
x

4. 返回向量组的类型与维数

V = np.linspace(1,20,20, endpoint = True)
print(V.dtype) # 数组属性(不需要括号)
print(V.shape)
print(np.ndim(V))

5. [:, np.newaxis]将一维数组转化为列向量

arr = np.array([1, 2, 3, 4, 5])  # 一维数组
print(arr.shape)  # 输出 (5,)

# 将一维数组转换为列向量
arr_column = arr[:, np.newaxis]
print(arr_column)
print(arr_column.shape)  # 输出 (5, 1),即5行1列的二维数组

三、二维数组

1. 定义

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

2. array.reshape()

np.arange(2,10).reshape(2,4)

3. np.shape(x)或x.shape:返回x的形状

x = np.array([[1,2,3],[3,4,5],[4,5,6]]) # 注意有两个方括号
np.shape(x)
rows, columns = x.shape # 元组解包

四、数组切片

B = np.arange(11,36).reshape(5,5)
print(B)
print(B[:3,2:]) # 注意多维切片的形式
print(B[2:3,:] # 取出第三行
print(B[:,4:] # 取出最后一列

五、零矩阵、一矩阵、单位矩阵、对角、上三角阵

1. 数组创建:np.zeros(size)、np.ones(size)

size = (2,3,4)
np.zeros(size) # 注意:括号内是元组
np.ones(size)

2. np.ones_like(x) np.zeros_like(x):生成与括号中相同维度的数组

x = np.array([[1,2,3],[4,5,6]])
print(np.ones_like(x))
print(np.zeros_like(x))

3. np.eye(N,M=None,k=0,dtype=float):单位阵,k=1表示向右偏移

np.eye(5,8,k=1,dtype = int)

4.np.diagflat(v, k=0):一维输入,二位输出,将一维输入放置于对角线,k表示对角线的位置。

a = np.array([1,2,3])
np.diagflat(a, k=1)

六、对数组形状的改变

1. A.flatten():扁平化处理

A = np.array([[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]])
a = A.flatten()

2. A.reshape(m,n,p) :改变数组形状

x = np.arange(24)
y = x.reshape(2,3,4)

y = np.reshape(np.arange(6),(3,2))

3. np.concatenate((a, b), axis):合并数组

a = np.array([[1,2],[3,4]])
b = np.array([5,6])
np.concatenate((a, b), axis = 0) # axis=0表示在行上进行合并
np.concatenate((a, b.T), axis = 1) # axis=1表示在列上进行合并
np.concatenate((a,b), axis = None) # axis=None表示扁平化处理

4. np.tile(x, (m,n)):数组元素的重复,(m,n)确定重复的维度

x = np.array([[1,2], [3,4]])
np.tile(x, (3,4))

七、数组运算

1. 标量

对数组的操作与对标量操作一致。因此,用numpy库进行运算时,对向量的运算可以避免使用for循环。

x = np.arange(10)
print(x+2)
print(np.sin(x))
print(np.log(x))

2. 数组计算(均值、方差、一阶差分)

x = np.linspace(0,25,10)
np.mean(x)
np.max(x)
np.std(x)
np.diff(x) # 一阶差分
np.reshape(x,(5,2))

2. 加法与乘法:对应位置上元素的运算

A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.ones((3,3))

3. dot运算:一维数组内积,二维数组矩阵乘法

print(np.dot(3,4)) # 简单乘法


x = np.array(3,4)
y = np.array(-3,4)
print(np.dot(x, y)) #向量dot表示内积


A = np.array([[1,2,3],[3,2,1]])
B = np.array([[2,3,4,-2],[1,-1,2,3],[1,2,3,0]])
print(A.shape[-1]==B.shape[-2]) # 判断矩阵相乘的条件
print(np.dot(A,B))

4. 矩阵乘法

A = np.array([[1,1,1],[2,2,2],[3,3,3]])
B = np.array([[1,2,3],[3,4,5],[4,5,6]])
MA = np.mat(A)
MB = np.mat(B)
print(MA*MB)

5. 判断矩阵各个位置的元素是否相等

A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.array([[11,102,13],[201,22,203],[31,32,303]])
A == B

6. 行列式、逆、求解方程组

c = np.arange(16)
np.random.shuffle(c)
c = c.reshape(4,4)


np.linalg.det(c) #计算行列式
np.linalg.inv(c) #求逆
c.T # 转置

A = np.array([[2,4],[6,3]])
b = np.array([4,2])
x = np.linalg.solve(A,b)

7. 广播:自动调整维度

A = np.array([[11,12,13],[21,22,23],[31,32,33]])
B = np.array([1,2,3]
A+B
A*B

8. 花式索引

C = np.array([123,188,190,99,77,88,100])
A = np.array([4,7,2,8,6,9,5])
R = C[A<5]
print(R)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值