import numpy as np
# numpy基本加减和取行操作
a = np.array([1,1,1,1])
b = np.array([[1],[1],[1],[1]])
c = np.array([[1,1,1,1]])
t1=a+b
t2=c+b
print(t1)
print(t2,'\n') # 广播机制
W = np.array([[1,1,1],[2,2,2]])
print(W[:,1]) # 会返回一维数组
print(W[1],'\n') # 取得是W1行,返回的也是一维数组
W[:,1] = np.array([5,5])
print(W[:])
# 这里用array[5,5]这样的一维数组直接可以把W矩阵的第1列替换(维度符合即可)
x = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
# delete()函数
p1 = np.delete(x, 1, 0) # 第0维度(行)1行被删除(初始行为0行)
print(p1)
p2 = np.delete(x, 1, 1) # 第1维度(列)1行被删除
print(p2)
p3 = np.delete(x, 1) # 拉平后删除第1个元素(初始为第0个)
print(p3)
p4 = np.delete(x, [0,1], 1) # 第1维度(列)第0、1行被删除
print(p4)
# insert()函数
q1 = np.insert(x, 1, [1,1,1,1], 0) # 第0维度(行)第1行添加[1,1,1,1]
print('>>>>q1>>>>\n',q1)
q2 = np.insert(x, 0, [1,1,1], 1) # 第1维度(列)第0列添加1,1,1
print('>>>>q2>>>>\n',q2)
q3 = np.insert(x, 3, [1,1,1,1], 0) # 第0维度(行)第3行添加[1,1,1,1]
print('>>>>q3>>>>\n',q3)
# append()函数
m1 = np.append(x,[[1,1,1,1]],axis=0) # 第0维度(行)尾部添加[[1,1,1,1]],注意两个[],相同维度
print('>>>>m1>>>>\n',m1)
m2 = np.append(x,[[1],[1],[1]],axis=1) # 第1维度(列)尾部添加[[1],[1],[1]],注意两个[],相同维度
print('>>>>m2>>>>\n',m2)
m3 = np.append(x,[1,1,1,1]) # 拉平后再尾部添加[1,1,1,1],这里可以[[1,1,1,1]]和[1,1,1,1]均可
print('>>>>m3>>>>\n',m3)
# np.random.choice(a, size, replace, p)
a1 = np.random.choice(7,5) # 从0~7中随机选择5个数组成一维数组
a2 = np.random.choice([0,1,2,3,4,5,6],5) # 从给定list中随机选择5个数组成一维数组
a3 = np.random.choice(np.array([0,1,2,3,4,5,6]),5) # 将list换成array数组依然可以运行,效果一致
a4 = np.random.choice([0,1,2,3,4,5,6],5,replace=False) # 上述均有重复,将replace设置为False,即可按要求没有重复的选取
a5 = np.random.choice(np.array([0,1,2,3,4,5,6]),5,p=[0.1,0.1,0.1,0.1,0.1,0.1,0.4])# 加权
print(a1,'\n',a2,'\n',a3,'\n',a4,'\n',a5)
np.argmax(a, axis=None, out=None)
a = np.array([[1,1,1],[2,2,2],[0,3,6]])
b1 = np.argmax(a) # 将数组a拉平,最大值索引为9(初始索引为0)
print(b1)
b2 = np.argmax(a, axis=0) # 按列选取最大值的索引
print(b2)
b3 = np.argmax(a, axis=1) # 按行选取最大值的索引
print(b3)
# 星号(*)的作用
y1 = np.linspace(-10.0,10.0) # 默认生成50个数据
y2 = np.linspace(1,10,10) # 生成10个数据,包括首尾
y3 = np.linspace(1,10,10,endpoint=False) # 不包括尾部数据
y4= np.linspace(1, 10, 6, retstep=True) # 将步长与结果的数组放入一个list、
print(y1,'\n',y2,'\n',y3,'\n',y4)
# 拉平操作 ravel()和faltten()及reshape(1,-1)的区别联系(补充[None,:]操作)
x = np.array([[1,2,3],[4,5,6],[1,2,3]])
print(x.flatten()) # 拉平
print(x.ravel(),'\n')
print(x.ravel('F')) # 按列拉平
print(x.flatten('F'),'\n')
x.flatten()[1] = 20
print(x,'\n')
x.ravel()[1] = 20
print(x,'\n')
x.reshape(1,-1) # 注意结果仍然是二维
print(x,'\n')
x = np.array([1,2,3,6,7,8]) # 注意操作的是数组,即原x是数组
x[None,:] # 转成行向量(二维矩阵)
print(x)
x[:,None] # 转成列向量(二维矩阵)
print(x)
x[np.newaxis, :] # np.newaxis与None用法一致
print(x)
x[:, np.newaxis]
print(x)
# np.prod() 计算元素乘积
x = np.array([[1,2,3],[2,3,4]])
print(np.prod(x))
print(np.prod(x,axis=1))
print(np.prod(x,axis=0))
# 把矩阵大于或小于N的元素置M的技巧
x = np.array([[1,2,3],[-3,2,4],[5,-2,9]])
y1 = np.maximum(0,x) # 把小于0的元素置0,并改变x的值 同x[x < 0] = 0
print(y1,'\n')
y2 = np.minimum(0,x) # 把大于0的元素置0,不改变x的值 同x[x > 0] = 0
print(y2,'\n')
# numpy中的矩阵copy问题
x = np.array([[1,2,3],[-3,2,4],[5,-2,9]])
x1 = x.copy() # copy(),开辟新地址
x1[x1 > 0] = 0
print(x1)
x2 = x # 直接等于,未开辟新地址,x2与x相关联
x2[x2>0] = 0
print(x2)
x=np.array([[ 0, 0, 0],
[-3, 0, 0],
[ 0, -2, 0]]) # x也改变
x = np.array([[1,2,3],[-3,2,4],[5,-2,9]])
x3 = x[2] # 取x的第3行
print(x3)
x3[2] = 100 # 将x3第3个元素置100
print(x3) # x中对应的元素置也被置成100了
# np.zeros_like()构造全零矩阵,无需指定大小
x = np.array([[1,2,3],[4,5,6]])
print(np.zeros_like(x)) # 生成一个和x大小相同的全零矩阵
# random.rand和random.rand和random.randint区别
# 产生随机浮点数
n = np.random.rand(3,4)
print(n)
#生成正态分布矩阵
x = np.random.randn(2,3)
print(x)
y = np.multiply(0.1,np.random.randn(2,3))+0.5 # 一般正态分布
print(y)
#生成离散均匀分布的整数值组成的矩阵
z = np.random.randint(2,9,(2,3))
print(z)
m = np.random.randint(9,size = (2,3))
print(m)
#np.pad()函数进行padding操作
A = np.arange(95,99).reshape(2,2)
print(A)
np.pad(A,((3,2),(2,3)),'constant',constant_values = (0,0))
#说明: 在矩阵行的上部分添加3行,下部分添加2行,在列的左部分添加2列,右部分添加3列。
b = np.array([[[1,2],[3,4]],[[3,4],[7,8]],[[4,5],[1,2]]])
print(b)
np.pad(b, ((0,0),(1,1),(1,1)), 'constant', constant_values = 0)
# numpy.empty() 创建指定形状和数据类型且未初始化的数组
x = np.empty([3,2], dtype = int)
print (x)
# 判断两个矩阵元素完全相等&&存在相等
a = np.array([[1,2,3],[1,2,3]])
b = np.array([[1,2,3],[1,2,3]])
c = np.array([[1,4,3],[1,2,3]])
print((a==b).all()) # 是否完全相等 True
print((a==c).all()) # False
print((a==c).any()) # 是否存在元素相等 True
# np.full 用于形成元素全为某元素的矩阵
c = np.array([[1,2],[3,4]])
print(c)
c.astype(np.float32)
print(c)
# np.meshgrid() 快速生成网格
x = np.array([1,3,5])
y = np.array([4,6])
XX,YY = np.meshgrid(x,y)
print(XX,'\n\n',YY)
# np.hstack() 和 np.vstack() 用于堆叠矩阵
x = np.array([[3,4,5],[1,3,4]])
y = np.array([[1,1,1],[2,2,2]])
print(np.hstack((x,y))) # 水平堆叠
print(np.vstack((x,y)))# 竖直堆叠
# numpy 取整
a = np.array([0.125,0.568,5.688])
print(np.round(a)) # 四舍五入取整, np.around 和 round 用法一致
print(np.round(a,decimals = 2)) # 四舍五入保留2位小数
print(np.floor(a))# 向下取整
print(np.ceil(a)) # 向上取整
# np.newaxis 在特定位置增加一个维度
c = np.array([1,2,5,4])
print(c[:,np.newaxis])
print(c[np.newaxis,:])
# python 广播机制
a = np.array([[1,2,3,6],[4,5,6,6]])
a1 = a.reshape((1,2,4))
print(a1,'\n')
b = np.array([[3,4,5,6],[1,2,3,4],[4,5,5,5]])
b1 = b.reshape((1,3,4)).transpose((1,0,2))
print(b1,'\n')
print(a1+b1)
D:\工具\python\python.exe C:/Users/Tony/PycharmProjects/pythonProject3/main.py
[[2 2 2 2]
[2 2 2 2]
[2 2 2 2]
[2 2 2 2]]
[[2 2 2 2]
[2 2 2 2]
[2 2 2 2]
[2 2 2 2]]
[1 2]
[2 2 2]
[[1 5 1]
[2 5 2]]
[[ 1 2 3 4]
[ 9 10 11 12]]
[[ 1 3 4]
[ 5 7 8]
[ 9 11 12]]
[ 1 3 4 5 6 7 8 9 10 11 12]
[[ 3 4]
[ 7 8]
[11 12]]
>>>>q1>>>>
[[ 1 2 3 4]
[ 1 1 1 1]
[ 5 6 7 8]
[ 9 10 11 12]]
>>>>q2>>>>
[[ 1 1 2 3 4]
[ 1 5 6 7 8]
[ 1 9 10 11 12]]
>>>>q3>>>>
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[ 1 1 1 1]]
>>>>m1>>>>
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[ 1 1 1 1]]
>>>>m2>>>>
[[ 1 2 3 4 1]
[ 5 6 7 8 1]
[ 9 10 11 12 1]]
>>>>m3>>>>
[ 1 2 3 4 5 6 7 8 9 10 11 12 1 1 1 1]
[6 1 6 6 3]
[5 1 4 1 4]
[4 5 4 5 0]
[2 5 1 3 6]
[1 4 2 3 0]
8
[1 2 2]
[0 0 2]
[-10. -9.59183673 -9.18367347 -8.7755102 -8.36734694
-7.95918367 -7.55102041 -7.14285714 -6.73469388 -6.32653061
-5.91836735 -5.51020408 -5.10204082 -4.69387755 -4.28571429
-3.87755102 -3.46938776 -3.06122449 -2.65306122 -2.24489796
-1.83673469 -1.42857143 -1.02040816 -0.6122449 -0.20408163
0.20408163 0.6122449 1.02040816 1.42857143 1.83673469
2.24489796 2.65306122 3.06122449 3.46938776 3.87755102
4.28571429 4.69387755 5.10204082 5.51020408 5.91836735
6.32653061 6.73469388 7.14285714 7.55102041 7.95918367
8.36734694 8.7755102 9.18367347 9.59183673 10. ]
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]
(array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ]), 1.8)
[1 2 3 4 5 6 1 2 3]
[1 2 3 4 5 6 1 2 3]
[1 4 1 2 5 2 3 6 3]
[1 4 1 2 5 2 3 6 3]
[[1 2 3]
[4 5 6]
[1 2 3]]
[[ 1 20 3]
[ 4 5 6]
[ 1 2 3]]
[[ 1 20 3]
[ 4 5 6]
[ 1 2 3]]
[1 2 3 6 7 8]
[1 2 3 6 7 8]
[1 2 3 6 7 8]
[1 2 3 6 7 8]
144
[ 6 24]
[ 2 6 12]
[[1 2 3]
[0 2 4]
[5 0 9]]
[[ 0 0 0]
[-3 0 0]
[ 0 -2 0]]
[[ 0 0 0]
[-3 0 0]
[ 0 -2 0]]
[[ 0 0 0]
[-3 0 0]
[ 0 -2 0]]
[ 5 -2 9]
[ 5 -2 100]
[[0 0 0]
[0 0 0]]
[[0.04896349 0.18196479 0.99125431 0.67401111]
[0.38125625 0.7826032 0.76235818 0.32016122]
[0.06124271 0.84115856 0.63462537 0.4174198 ]]
[[ 1.45276094 0.99459509 1.0835566 ]
[ 0.10366162 -0.65290653 0.88924267]]
[[0.64448716 0.36942489 0.56809195]
[0.60097897 0.37759209 0.21714533]]
[[2 5 4]
[4 4 5]]
[[4 3 8]
[5 5 0]]
[[95 96]
[97 98]]
[[[1 2]
[3 4]]
[[3 4]
[7 8]]
[[4 5]
[1 2]]]
[[0 0]
[1 1]
[1 1]]
True
False
True
[[1 2]
[3 4]]
[[1 2]
[3 4]]
[[1 3 5]
[1 3 5]]
[[4 4 4]
[6 6 6]]
[[3 4 5 1 1 1]
[1 3 4 2 2 2]]
[[3 4 5]
[1 3 4]
[1 1 1]
[2 2 2]]
[0. 1. 6.]
[0.12 0.57 5.69]
[0. 0. 5.]
[1. 1. 6.]
[[1]
[2]
[5]
[4]]
[[1 2 5 4]]
[[[1 2 3 6]
[4 5 6 6]]]
[[[3 4 5 6]]
[[1 2 3 4]]
[[4 5 5 5]]]
[[[ 4 6 8 12]
[ 7 9 11 12]]
[[ 2 4 6 10]
[ 5 7 9 10]]
[[ 5 7 8 11]
[ 8 10 11 11]]]
进程已结束,退出代码0