基本形式:[* for i in *]
第一个 * 为映射函数,其输入为后面 i 指代的内容,第二个 * 表示迭代的对象。
例如生成5个偶数2 4 6 8 10
[2*i for i in range(1,6)]
[2, 4, 6, 8, 10]
多层嵌套:
第一个 for 为外层循环,第二个为内层循环
例1
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
['a_c', 'a_d', 'b_c', 'b_d']
例2(生成99乘法表)
[str(a)+"x"+str(b)+'='+str(a*b) for a in range(1,10) for b in range(a,10)]
['1x1=1', '1x2=2', '1x3=3', '1x4=4', '1x5=5', '1x6=6', '1x7=7', '1x8=8', '1x9=9', '2x2=4', '2x3=6', '2x4=8', '2x5=10', '2x6=12', '2x7=14', '2x8=16', '2x9=18', '3x3=9', '3x4=12', '3x5=15', '3x6=18', '3x7=21', '3x8=24', '3x9=27', '4x4=16', '4x5=20', '4x6=24', '4x7=28', '4x8=32', '4x9=36', '5x5=25', '5x6=30', '5x7=35', '5x8=40', '5x9=45', '6x6=36', '6x7=42', '6x8=48', '6x9=54', '7x7=49', '7x8=56', '7x9=63', '8x8=64', '8x9=72', '9x9=81']
lambda 相当于简单的函数映射
例(简单求和函数)
fun1 = lambda a,b : a+b
fun1(3,5)
8
如果去掉函数名:
(lambda a,b : a+b)(3,5)
map方法
[(lambda x:2*x)(i) for i in range(5)]
用map可写作
list(map(lambda x: 2*x, range(5)))
[0, 2, 4, 6, 8]
for循环中:
for i, j in zip(range(5),[4,3,2,1,0]):
print(i,j)
0 4
1 3
2 2
3 1
4 0
建立字典映射时:
a = [1,2,3]
b = ['one', 'two', 'three']
dict(zip(a, b))
{1: 'one', 2: 'two', 3: 'three'}
import numpy as np
基础形式:
np.array([1,2,3,4,5])
[1 2 3 4 5]
特殊数组:
linspace
arange
np.linspace(0,100,11)#起始值,终值,元素个数
[ 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100.]
np.arange(1,5,2) # 起始、终止(不包含)、步长
[1 3]
np.zeros((2,3)) # 传入元组表示各维度大小
np.empty(3,3)#未进行初始化的3*3矩阵
np.eye(n) # n*n 的单位矩阵
np.full((2,3), 10) # 元组传入大小,10 表示填充数值
np.random.rand(3,3)
#生成3*3的随机矩阵,矩阵值0-1
[[0.86270792 0.90534714 0.40187139]
[0.634286 0.25515137 0.25612804]
[0.9526155 0.58756532 0.80411909]]
np.random.randint(low, high, size)
#指定大小,范围的随机矩阵
np.random.randint(5,9,(4,4))
[[8 7 6 7]
[7 6 6 6]
[5 7 6 8]
[5 5 6 5]]
choice抽取元素:
choice 可以从给定的列表中,以一定概率和方式抽取结果
基本形式:
np.random.choice(my_list, n, replace=, p=)
#my list表示所选的列表
#n为选择的个数
#repalce表示是否允许重复
#p为各个选项对应的概率
例1
np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
例二
np.random.choice(my_list, (3,3))
[['a', 'c', 'b']
['b', 'b', 'd']
['d', 'b', 'c']]
permutation随机排列
np.random.permutation(my_list)
['c' 'a' 'b' 'd']
随机种子
用于固定随机情况
list1 = np.random.rand(3)
print(list1)
list2 = np.random.rand(3)
print(list2)
np.random.seed(0)
list3 = np.random.rand(3)
print(list3)
[0.5488135 0.71518937 0.60276338]
[0.54488318 0.4236548 0.64589411]
[0.5488135 0.71518937 0.60276338]
'''
list1 equal list3
'''
转置:
np.zeros((2,3)).T
[[0., 0.],
[0., 0.],
[0., 0.]]
矩阵合并:
例1
np.r_[np.zeros((2,3)),np.zeros((2,3))]
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]
np.c_[np.zeros((2,3)),np.zeros((2,3))]
[[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]]
r_ 和 c_ 分别表示上下合并(按行)和左右合并(按列):
数组与矩阵合并时,数组看作列向量
例2
np.c_[np.array([0,0]),np.zeros((2,3))]
[[0., 0., 0., 0.],
[0., 0., 0., 0.]]
reshape转换大小:
reshape 能够帮助用户把原数组按照新的维度重新排列。在使用时有两种模式,分别为 C 模式和 F 模式,分别以逐行和逐列的顺序进行填充读取。
import numpy as np
np.arange(8).reshape(2,4)
[[0, 1, 2, 3],
[4, 5, 6, 7]]
target.reshape((4,2))
[[0 1]
[2 3]
[4 5]
[6 7]]
np.ix_ 布尔索引
例:
target = np.arange(9).reshape(3,3)
target[np.ix_([True, False, True], [True, False, True])]
#第一个列表表示所取行
#第二个列表表示所取列
#或者表示成:
target[np.ix_([1,3], [True, False, True])]
[[0, 2],
[6, 8]]
start:end:step 切片
二维数组两个参数,分别为行的切片,每行中元素的切片
例:
target = np.arange(9).reshape((3,3))
target[:-1, [0,2]]
[[0 2]
[3 5]]
shape
返回矩阵的大小
条件函数,可以指定满足条件与不满足条件位置对应的填充值
where(条件,满足条件的替代值值,不满足的替代值)
例
a = np.array(range(5))
np.where(a>=3,a,-1)#a数组中大于等于3的,保持a中元素不变,其他变成-1
[-1 -1 -1 3 4]
np.where(a>=3,1,-1)
[-1 -1 -1 1 1]
nonzero, argmax, argmin
nonzero返回非0索引
argmax返回最大值索引
argmin返回最小值索引
a = np.array(range(5))
a.argmax()
4
统计函数
对于数组:
a = np.array(range(5))
a.max()#返回最大值4
a.min()#返回最小值0
a.mean()#返回平均数2
np.median(a)#中位数2
a.sum()#返回和10
对于矩阵(二维数组):
axis参数可以选定行或者列
axis=0 时结果为列的统计指标,当 axis=1 时结果为行的统计指标
target = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
target.sum(0)
[12, 15, 18]
target.sum(1)
[ 6, 15, 24]
向量内积(点乘):
a,b为向量,a·b表示为
a.dot(b)
矩阵乘法
A,B为矩阵,矩阵A乘矩阵B表示为
A@B
未完...