1、导入并查看Numpy版本
import numpy as np
print(np.__version__)
2、创建十个全为0的一维数组
all_zeros=np.zeros(10)
3、创建10个全为0的一维数据并修改数据类型为整数
all_zeros=np.zeros(10,dtype='int')
4、创建20个0-100固定步长的数
value=np.arange(0,5,100)
5、从list创建数组
List=[1,2,3,4,5,6,7,8,9]
list2arr=np.array(List)
6、创建一个三行三列全是1的矩阵
matirix=np.ones((3,3))
# 方法2
matirix=np.array([[1,1,1],
[1,1,1],
[1,1,1]])
7、创建一个2行2列矩阵并且元素为布尔类型的True
# 方法1
matrix1=np.ones((2,2),dtype="bool")
# 方法2
matirix1=np.full((2,2),True,dtype=bool)
numpy.full的用法:
numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)
返回一個給定形狀和類型的新數組,用fill_value填充
8、创建等差数列,从5开始,50结束,共十个数据
arr=np.linspace(start=5,stop=50,num=10)
9 、创建等差数列,从5开始,50结束,共十个数据,数据类型为int32
arr=np.arrange(start=5,stop=50,num=10,dtype='int32')
arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。
linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。
10、创建3X3矩阵,矩阵元素均为0-10之间的随机数
arr=np.random.randint(0,10,(3,3)) # randint表明是int类型的随机数
11、创建3X3矩阵,矩阵元素均为服从标准正态分布的随机数
#服从正态分布的矩阵
arr=np.random.randn(3,3)
12、将第五题的result修改成3X3矩阵
result=result.reshape((3,3))
数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。
参考链接:https://blog.csdn.net/qq_29373285/article/details/82753306
kps = np.reshape(kps, [-1, 3])
13、对上一题生成的result取转置
result=result.T
14、查看result的数据类型
result.dtype #dtype=data type
15、将result的数据类型修改为float
result.astype('float')
16、提取result第三行第三列的元素
result[2,2]
17、将result的第三行第三列的元素放大十倍
result[2,2]=result[2,2]*10
18、提取result中的所有偶数
result[result*2==0]
19、将result中所有奇数修改成666
result[result%2==1]=666
20、创建主对角线都是5的5x5矩阵
np.diag([5,5,5,5,5])
21、交换第一列和第二列
#个人理解,:的意思是取所有的行
result[:,[1,0,2,3,4]]
22、交换第一行和第二行
result[[1,0,2,3,4],:]
23、判断两个矩阵是否有任何元素不同
a=np.random.randint(0,5,(5,5))
b=np.random.randint(0,5,(5,5))
print(a==b)
print((a==b).all())
/****************************解释***************************
第一行创建了随机的5X5矩阵a和b
a:[0 0 0 1 0]
[0 4 1 2 2]
[3 0 3 1 2]
[1 4 3 4 3]
[0 0 4 0 0]
b:[0 4 3 2 2]
[1 4 2 2 1]
[2 2 4 1 1]
[2 0 4 3 1]
[4 0 1 2 3]
a==b 判断a矩阵中的Aij是不是等于b矩阵中的Bij,同样返回的是5X5的bool矩阵
all的用法是判断列表或者矩阵中的元素是不是都为True,如果是的话返回True,否则返回False
第三步得到的结果:
[ True False False False False]
[False True False True False]
[False False False True False]
[False False False False False]
[False True False False False]
第四步得到的结果:
False
24、找到两个矩阵不同元素的个数
len(np.argwhere(a!=b) # arg:argument np.argwhere是找出元素的坐标
25、找到两个矩阵不同元素的位置
np.argwhere(a!=b)
26、对a和b做矩阵乘法
np.dot(a,b)
a.dot(b)
/******************************解释*******************************/
a:[4 4 0 2 4]
[2 1 3 1 0]
[2 1 4 0 1]
[2 3 3 4 0]
[2 2 0 1 4]
b: [0 0 3 2 3]
[0 1 4 3 4]
[4 0 2 0 3]
[3 2 0 3 0]
[1 0 0 2 0]
结果:
[10 8 28 34 28]
[15 3 16 10 19]
[17 1 18 9 22]
[24 11 24 25 27]
[ 7 4 14 21 14]
27、计算a和b对应元素相乘
np.multiply(a,b)
a*b
28、计算行列式(使用20题生成的矩阵)
result=np.diag([5,5,5,5,5])
print(np.linalg.det(result))
/**********************************解释**********************************/
linalg:linearly algebra
numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、特征值、解线性方程组以及求解行列式等
29、 计算逆矩阵(使用20题生成的矩阵)
result=np.diag([5,5,5,5,5])
print(np.linalg.inv(result))
30、将21与23题生成的np.array对象修改为np.matrix对象
a=np.matrix(a)
b=np.matrix(b)
/************************解释************************
np.matrix和np.array的区别:
Numpy matrices必须是2维的,但是 numpy arrays (ndarrays) 可以是多维的(1D,2D,3D····ND). Matrix是Array的一个小的分支,包含于Array。所以matrix 拥有array的所有特性。
参考链接:https://blog.csdn.net/vincentlipan/article/details/20717163#:~:text=Numpy%20matrices%E5%BF%85%E9%A1%BB%E6%98%AF2,%E6%8B%A5%E6%9C%89array%E7%9A%84%E6%89%80%E6%9C%89%E7%89%B9%E6%80%A7%E3%80%82
31、对31题生成的两个np.matrix格式矩阵做矩阵乘法。(对比异同)。
a*b
/***************************解释**************************/
在array中,都是逐元素计算的,所以a*b是矩阵中对应位置的相乘
在matrix中,a*b是矩阵的点乘,相等于dot运算。
/*******************************************************/
32、对30题生成的两个matrix格式矩阵对应元素乘积
np.multiply(a,b)
33、将ab两个矩阵按照行拼接
"""
# 创建一个(500,500)的符合正太分布的数组
# randn和normal的区别,randn是生成标准正态分布(均值为0,标准差为1),normal是生成正态分布 (均值和标准差需要自己设置)
"""
stock_data=np.random.normal(0,1,(500,500))
a=stock_data[:2,0:4]
b=stock_data[10:12,0:4]
ab=np.hstack([a,b]) # h:horizon 水平,按照行拼接,a和b的对应行放在一起
"""
a: [-1.04016214 -1.18886941 -0.09304506 0.06712439]
[ 1.2901525 -0.74843788 -2.28524141 -1.02828514]
b: [ 0.29143334 1.61952124 -0.49708346 1.68043726]
[-1.19088374 0.90594722 0.72814536 -0.29100078]
ab: [-1.04016214 -1.18886941 -0.09304506 0.06712439 0.29143334 1.61952124 -0.49708346 1.68043726]
[ 1.2901525 -0.74843788 -2.28524141 -1.02828514 -1.19088374 0.90594722 0.72814536 -0.29100078]
a:两行四列 b:两行四列 ab:两行八列
"""
ab1=np.vstack([a,b]) # vertical 垂直,按照列拼接
"""
a: [ 0.51856166 -0.92199658 0.11480674 0.93551666]
[-0.14545943 2.32839919 -1.66577729 -1.39514822]
b: [ 1.07185259 0.73868502 0.05372755 0.06264392]
[ 0.57656547 -0.58346924 0.17935722 -0.21453095]
ab1: [ 0.51856166 -0.92199658 0.11480674 0.93551666]
[-0.14545943 2.32839919 -1.66577729 -1.39514822]
[ 1.07185259 0.73868502 0.05372755 0.06264392]
[ 0.57656547 -0.58346924 0.17935722 -0.21453095]
a:两行四列 b:两行四列 ab1:四行四列
"""
cab1=np.concatenate([a,b],1) # 按照行拼接,矩阵a和b,相当于hstack
cab=np.concatenate([a,b],0) # 按照列拼接,相当于vstack
"""
a: [-1.54656119 -0.74738503 -0.25542205 0.03775523]
[-1.6279168 0.21410622 -0.42335904 0.61137777]
b: [ 0.23546367 1.83913083 -1.56747831 0.10838006]
[-1.17256061 -0.12873521 0.22496662 1.20485756]
cab: [-1.54656119 -0.74738503 -0.25542205 0.03775523 0.23546367 1.83913083
-1.56747831 0.10838006]
[-1.6279168 0.21410622 -0.42335904 0.61137777 -1.17256061 -0.12873521
0.22496662 1.20485756]
cab1: [-1.54656119 -0.74738503 -0.25542205 0.03775523]
[-1.6279168 0.21410622 -0.42335904 0.61137777]
[ 0.23546367 1.83913083 -1.56747831 0.10838006]
[-1.17256061 -0.12873521 0.22496662 1.20485756]
"""
34、思考下面代码运行后new的结果
result=np.diag([5,5,5,5,5])
new=np.pad(result,pad_width=1,constant_values=1)
"""
result: [5 0 0 0 0]
[0 5 0 0 0]
[0 0 5 0 0]
[0 0 0 5 0]
[0 0 0 0 5]
new: [1 1 1 1 1 1 1]
[1 5 0 0 0 0 1]
[1 0 5 0 0 0 1]
[1 0 0 5 0 0 1]
[1 0 0 0 5 0 1]
[1 0 0 0 0 5 1]
[1 1 1 1 1 1 1]
按照pad_width在result周围填补一圈constant_value
"""
35、找到new中大于1的元素的位置
np.argwhere(new>1)
36、将new中大于1的元素修改为8
new[new>1]=8
37、对new矩阵按列求和
np.sum(new,0)
38、对new矩阵按行求和
np.sum(new,1)
39、找到每列的最大值
np.amax(data,axis=0)
"""
np.max和np.amax等价
np.max返回的是最大值
np.argmax返回的是最大值的索引
np.maximum输入的是两个数组,逐元素的比较两个矩阵的值大小。
np.maximum(a,b)
"""
40、找到每行的最小值
np.amin(data,axis=1)
41、计算data每个元素出现的次数
np.unique(data,return_counts=True)
# 会返回两个数组,一个是元素,另一个是元素出现的次数
from collections import Counter
Counter(data)
# 返回的是字典,key是元素,value是元素出现的次数
42、计算data每行元素大小排名
data.argsort()
"""
result=np.random.randint(0,50,(5,5))
print(result)
print(result.argsort())
result: [43 32 30 9 0]
[15 41 24 32 11]
[ 7 39 3 5 46]
[39 43 20 43 4]
[16 10 34 49 13]
结果:
[4 3 2 1 0]
[4 0 2 3 1]
[2 3 0 1 4]
[4 2 0 1 3]
[1 4 0 2 3]
"""
43、将data按行重复一次
np.repeat(result,2,axis=0)
44、去掉data的重复行
np.unique(data,axis=0)