Python - numpy库

本文详细介绍了Numpy库的基础运算功能,包括属性查看、数组创建、基本运算、矩阵运算、随机数生成、统计运算、索引操作、数组合并与分割、以及copy与deepcopy的区别。适用于初学者快速掌握Numpy的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Numpy库 —— 基础运算

'''
@Author: Dylan
@Date: 2020-05-21 13:57:51
@LastEditTime: 2020-05-21 17:26:38
@LastEditors: Dylan
@Description: Numpy
@FilePath: \python_code\test.py
'''
import numpy as np

#numpy属性
arr = np.array([[1,2,3],[2,3,4]])   #二维   矩阵
print(arr)
print('number of dim:',arr.ndim)    #几维数据  
print('shape:',arr.shape)           #行数列数
print('size:',arr.size)             #多少元素

#numpy的创建
a = np.array([1,2,3,4,5,6],dtype = int)  #元素类型dtype
print(a)
print(a.dtype)

a = np.zeros((3,4))  #生成3行4列,且元素均为0
print(a)
a = np.ones((3,4),dtype = float)  #生成3行4列,且元素均为1,元素类型为float
print(a)
print(a.dtype)
a = np.empty((3,4,5))  #生成3行4列,且元素均为几乎接近为0
print(a)

#生成有序的序列
a = np.arange(10,20,2) #起始10,结尾20 - 1,步长2
print(a)
a = np.arange(10) #生成0到10 - 1 的序列
print(a)
a = np.arange(12).reshape((3,4)) #生成0到12 - 1 的序列,且为3行4列
print(a)

#生成线段
a = np.linspace(1,10,20)  #生成1到10的线段,且一共有20段
print(a)
a = np.linspace(1,10,6).reshape((2,3))  #生成1到10的线段,且一共有6段, 且为2行3列
print(a)

#numpy的基本运算
a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)

# + - * / **  对应元素运算
c = a - b
print(c)
c = b**3         # 幂是采用**, 而不是 ^
print(c)
#三角运算   sin cos tan  弧度制 
c = 10 * np.sin(a)   
print(c)

#判断元素是否满足某个条件
print(b)
print(arr<3)     #b有哪些元素小于3

#矩阵运算
a = np.array([[1,1],[0,1]])
b = np.arange(4).reshape((2,2))
print(a)
print(b)
c = a * b                     #元素对应相乘
c_dot = np.dot(a,b)           #矩阵乘法运算1
c_dot_2 = a.dot(b)            #矩阵乘法运算2
print(c)
print(c_dot)
print(c_dot_2)

#创建一个随机生成 0-1 的2行4列的序列
a = np.random.random((2,4))
print(a)

print(np.sum(a)) #求和
print(np.min(a)) #求最小值
print(np.max(a)) #求最大值
print('123123')
print(np.sum(a, axis = 1))#求得在矩阵中,每一行的求和       axis = 1,在行数中求和
print(np.sum(a, axis = 0))#求得在矩阵中,每一列的求和       axis = 0,在列数中求和
print(np.max(a, axis = 1))#求得在矩阵中,每一行的最大值     axis = 1,在行数中求和
print(np.max(a, axis = 0))#求得在矩阵中,每一列的最大值     axis = 0,在列数中求和
print(np.min(a, axis = 1))#求得在矩阵中,每一行的最小值     axis = 1,在行数中求和
print(np.min(a, axis = 0))#求得在矩阵中,每一列的最小值     axis = 0,在列数中求和



#numpy的基础运算2
A = np.arange(2,14).reshape(3,4)
print(A)
print(np.argmin(A)) #最小值的索引,因为最小值是2,且2是在第0位,所以值为0
print(np.argmax(A)) #最小值的索引,因为最大值是14,且14是在第11位,所以值为11
print(np.mean(A))   #平均值
print(A.mean())     #平均值
print(np.average(A))   #平均值
print(np.median(A))  #中位数
print(A)
print(np.cumsum(A)) #逐步累加
print(np.diff(A))  #彼此累差    如第一个值为 第2个数 - 第1个数; 第二个值为 第3个数 - 第2个数;

A = np.arange(12).reshape(3,4)
print(A)
print(np.nonzero(A))   #打印出非0的元素位置, 第一个array代表行, 第二个array代表列,  每个位对应起来
                        #如 第一个array的第1位为0,代表第0行;而第二个array的第1位为1,代表第1列;  即为第0行1列的元素非0
#排序
a = np.arange(14,2,-1).reshape((3,4))
print(a)
print(np.sort(a))   #若为二维, 则为逐行排序

#矩阵的反向
print(a)
print(np.transpose(a))
print(a.T)
#反向后再矩阵乘法
print((a.T).dot(a))

print(a)        
print(np.clip(a,5,9))  # 第1个参数:array  第2个参数:小于该值时,均为该值    第3个参数:大于该值时,均为该值

print(a)
print(np.mean(a, axis = 0)) #每一列的平均值
print(np.mean(a, axis = 1)) #每一行的平均值

#numpy的索引
A = np.arange(3,15) #一维
print(A)
#位置索引
print(A[3]) #第3个值

A = np.arange(3,15).reshape((3,4)) #二维
print(A)
print(A[2])   #索引第二行内容
print(A[1][1])  #索引第一行第一列内容
print(A[1,1])   #索引第一行第一列内容

print(A[2,:])   #第二行所有数
print(A[:,1])   #第一列所有数
print(A[1,1:3]) #第一行,从1到3列的所有数

for row in A:       #打印每一行
    print(row)

for column in A.T:     #打印每一列    通过对称
    print(column)

print(A.flatten())  #将矩阵A变为一维
for item in A.flat:     #打印每一个元素    通过把矩阵A变为一维
    print(item)



#numpy的array合并
A = np.array([1,1,1])
B = np.array([2,2,2])
#上下合并   vertical stack    多个array合并
C = np.vstack((A,B,B,A))
print(A.shape, C.shape)
print(C)
#左右合并   horizontal stack
D = np.hstack((A,B,A,B))
print(D.shape)
print(D)

#加一个维度,将行改为列
print(A)
B = A[:,np.newaxis]
print(B)


A = np.array([1, 2])[:,np.newaxis]
B = np.array([2,3])[:,np.newaxis]
#多个array合并,并选择上下左右合并
C = np.concatenate((A,B),axis = 0)   #左右合并
print(C)

C = np.concatenate((A,B),axis = 1)   #左右合并
print(C)

#numpy的array分割
A = np.arange(12).reshape((3,4))
print(A)
#纵向分割   分成2块
print(np.split(A,2,axis = 1))
#横向分割   分成3块
print(np.split(A,3,axis = 0))   #split只能实现等量分割
print(np.array_split(A,3,axis = 1))#不等量分割

print(np.vsplit(A,3)) 
print(np.hsplit(A,2))


#numpy的copy & deep copy
a = np.arange(4)
print(a)
b = a  #b完全是a
print(b)
print(b is a)
c = a
d = b  #d完全是b  所以 d 完全是 a
a[0] = 11
print(a, b , d)

d[1:3] = [22,33]
print(d, a)

#若想 b 赋值a, 但两者不关联
b = a.copy()   # deep copy
print(b)
a[3] = 44
print(a, b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值