一段代码学习Numpy基础

import numpy as np

# 创建一个3*3矩阵
arr = np.array([
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5]
], dtype=np.float64)

print(arr)
print('dim:', arr.ndim) # 维度
print('shape:', arr.shape) # 形状:几行几列
print('size:', arr.size) # 包含元素的个数

arr1 = np.arange(1, 100, 2) # 在1-100之间生成步长为2的数据
arr2 = np.arange(10) # 生成0-10之间的10个数
print(arr1)
print(arr2)

print(arr1.reshape((5, 10))) # 将形状设置为5行,10列

zero = np.zeros([4, 4], dtype=np.float32) # 元素都为0的矩阵
print(zero)

one = np.ones([3, 4], dtype=np.float32)  # 元素都为1的矩阵
print(one)

empty = np.empty([3, 3], dtype=np.int32) # 元素都为空的矩阵
print(empty)

ls = np.linspace(1, 30, 40, dtype=np.float32) #生成1-30之间的40个浮点数字
print('linespace:\n', ls)



# 基础运算

a = np.array([1,2,3,4]) # [1,2,3,4]
b = np.arange(4) # [0,1,2,3]

## 减法
sub = a - b
print('sub:', sub)

## 加法
add = a + b
print('add:', add)

## 乘法
multi = a * b
print('multi:', multi)

## 除法
divi = b / a
print('divi:', divi)

## 利用广播功能判断满足条件的数
print(a > 2) # 判断a中大于2的数,返回一个包含True和False的列表[True, True, False, False]
print(a == 4) # [False, False, False, True]


# 矩阵运算
aa = np.array([[1,2,3],
               [2,3,4]]) # 创建一个2*3的矩阵
bb = np.arange(6).reshape((2, 3)) # 生成一个2*3的矩阵

# 加
print(aa + bb)

# 减
print(aa - bb)

# 逐个相乘
print(aa * bb)

# 矩阵乘
cc = bb.reshape(3, 2) # 因为aa为2*3的矩阵,所以与其相乘的矩阵的行数必须与其列数一致,即为3
print(np.dot(aa, cc))
print(aa.dot(cc)) #这两种乘法的结果一致

rdn = np.random.random((3, 4)) # 随机生成一个元素在0-1之间的3*4的矩阵
print(rdn)

# 求矩阵内和
print(np.sum(rdn)) # 求整个矩阵元素相加的总和
print(np.sum(rdn, axis=1)) # axis代表坐标轴,1指的是以行为单位求行的和
print(np.sum(rdn, axis=0)) # axis代表坐标轴,1指的是以行为单位求列的和

# 求矩阵中的min值
print(np.min(rdn)) # 在整个矩阵中找最小值
print(np.min(rdn, axis=1)) # 在矩阵的行中找最小值
print(np.min(rdn, axis=0)) # 在矩阵的列中找最小值

# 求矩阵中的最大值
print(np.max(rdn)) # 在整个矩阵中找最大值
print(np.max(rdn, axis=1)) # 在整个矩阵的行中找最大值
print(np.max(rdn, axis=0)) # 在整个矩阵的列中找最大值

# 基础运算2
aa2 = np.arange(0,12).reshape((3,4)) # 生成一个元素在1-12的3*4的矩阵
print(aa2)

print(np.argmin(aa2)) # 求最小值索引
print(np.argmax(aa2)) # 求最大值索引

print(np.mean(aa2)) # 计算矩阵平均值 aa2.mean()或者aa2.average()亦可
print(np.mean(aa2, axis=0)) # 指定列计算平均数
print(np.mean(aa2, axis=1)) # 指定行计算平均数

print(np.median(aa2)) # 求中位数,例如0-11的中位数为5.5

print(np.cumsum(aa2)) # 累加 第一个数的值 = 第一个数, 第二个数的值 = 第一 + 第二, 第三个数的值 = 第一 + 第二 + 第三...,以此类推

print(np.nonzero(aa2)) # 找出非0的数

print(np.sort(aa2)) # 逐行排序

print(np.transpose(aa2)) # 矩阵转置,行列元素互换 亦可写成 aa2.T

print(np.clip(aa2, 6, 10)) # 截取数值,在6-10之间的数保持原样,小于6变为6, 大于10变为10

print(aa2[2]) # 索引第二行
print(aa2[2][2]) # 索引第二行第二列
print(aa2[:, 1]) # 第一列所有数 [1, 5, 9]
print(aa2[0:2, 1]) # 第一列第0,1的数 [1, 5]

for row in aa2:
    print(row) # 迭代每一行

for col in aa2.T:
    print(col) # 先将aa2转置,再进行行迭代,即可得到aa2的列

aa2_flat = aa2.flatten()# 将矩阵返回一维数组
print(aa2_flat)

for item in aa2_flat:
    print(item) # 迭代每一个项


# 合并array
A = np.array([1,2,3])
B = np.array([2,3,4])
C = np.vstack((A, B)) # 垂直合并
D = np.hstack((A, B)) # 水平合并
print(C)
print(D)

E = np.concatenate((A, B, A, B), axis=0) # 在列的维度上进行合并
print(E)

# 分割
A = np.arange(12).reshape(3, 4)
print(A)

print(np.split(A, 3, axis=0)) # 在列上进行分割
print(np.split(A, 2, axis=1)) # 在行上进行分割

print(np.vsplit(A, 3)) # 垂直方向分割
print(np.hsplit(A, 2)) # 水平方向进行分割

# deep copy
aa3 = A # 浅拷贝 aa3改变会引发A改变,容易导致数据出错
print(aa3 is A) # True aa3和A指向的是内存中同一个地址

aa4 = A.copy() # deep copy aa4的改变不会引起A改变
print(aa4 is A) # False 深拷贝后的aa4在内存中有了自己的位置

猜你喜欢

转载自blog.csdn.net/qq_37338983/article/details/103142653
今日推荐