科学计算包——numpy包

本文详细介绍NumPy库中的基本数据类型与结构,包括数组操作、线性代数、随机数生成等关键功能,适用于科学计算与数据分析领域的初学者与进阶用户。

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

一、基本数据类型

请参见这篇博文      基本数据类型介绍

bool_            Boolean (True or False) stored as a byte
int_               Default integer type (same as C long; normally either int64 or int32)
intc               Identical to C int (normally int32 or int64)
intp               Integer used for indexing (same as C ssize_t; normally either int32 or int64)
int8               Byte (-128 to 127)
int16             Integer (-32768 to 32767)
int32             Integer (-2147483648 to 2147483647)
int64             Integer (-9223372036854775808 to 9223372036854775807)
uint8             Unsigned integer (0 to 255)
uint16           Unsigned integer (0 to 65535)
uint32           Unsigned integer (0 to 4294967295)
uint64           Unsigned integer (0 to 18446744073709551615)
float_            Shorthand for float64.
float16          Half precision float: sign bit, 5 bits exponent, 10 bits mantissa
float32          Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
float64          Double precision float: sign bit, 11 bits exponent, 52 bits mantissa
complex_          Shorthand for complex128.
complex64        Complex number, represented by two 32-bit floats (real and imaginary components)
complex128      Complex number, represented by two 64-bit floats (real and imaginary components)

进行数据类型转换,如下所示:

import numpy as np

a = np.float(1)
print(type(a))      # <class  'float'>
a = np.int(a)
print(type(a))      #<class   'int'>

二、基本的数据结构类型

ndarray(多维数组类型):

创建方法:  a = np.array([1,2,3])       # type(a)  输出结果是 < class   'numpy.ndarray' >,查看的是数据结构的类型

       注意:经常容易搞混array和ndarray,其实,前者只是一个函数,而后者是一个类型。通过函数array可以构建一个ndarray类型。   切记!  array并不是一个类型,不能误以为是数组类型。

常用的数组可以直接调用的方法和属性: 

import numpy as np
a = np.array([[[1],[1]]])

a.shape               # 查看数组维度信息
a.size                # 求数组中元素总个数
a.dtype               # 查看的是数据结构中所存贮的数据的基本类型,例如 'int32'   
a.sum(axis=0)         # 指定的维度上求和
a.max(axis=0)         # 指定维度求最大值,同样也有min()
a.mean(axis=0)        # 指定维度求均值
a.argmax(axis=0)      # 指定维度上求最大值所对应的索引序号,也有argmin()
a.flatten()           # 展开为一维数组
a.T                   # 转置
a.reshape((1,2))      # 转换形状,注意只是形状发生变化,元素总数是不能变得
a.astype(np.float)    # 转换数据类型

# 其次,在两个维度一致的数组间,可进行加减乘除运算,是对应元素进行运算
b = np.array([[1,2],[3,4]])
c = np.array([[3,4],[5,6]])
print(b+c)                #[[4,6],[8,10]]
print(b*c)                #[[3,8],[15,24]]

#乘方计算
print(b ** 2)         #[[1,4],[9,16]]
print(b ** c)         #[[1,16],[243,4096]]
#注意,上面的四则运算及乘方运算均没有改变维度


#当两个维度不一致的数组进行运算时,广播机制可以允许一些情况下进行上述运算
#保证必须要能对应上
d = np.array([1,2])      # 此时 b和d 上述运算都可以进行,分别两两对应进行
d = np.array([1])        #  此时也可以
d = np.array([1,2,3])    # 此时就不能再进行运算了

 常用的操作数组的方法:

import numpy as np

b = np.array([[1,2],[3,4]])
c = np.array([[3,4],[5,6]])
print(np.dot(b,c))      # [[13,16],[29,36]]  实现的是矩阵的乘法,必须保证维度信息对应正确
np.dot([1,2],[3,4])   # 11  当参数是一维,或者其他维都是1的时候(比如维度是 1X1X2),可以进行运算
np.sum(b)      # 10  求和,当不指定维度信息时全部求和。 可以通过axis参数设定求哪一个维度的
np.mean(b)        # 与上同理
np.std()      # 标准差
np.transpose(b)   # 转置
np.trace(b)       # 求迹

 np自身常用方法:

import numpy as np

np.abs(a)
np.sin(a)   #注意参数a应转成弧度值
np.arctanh(a) 
np.exp(a)
np.power(a,b)   #a**b
np.e   
np.pi
np.sqrt(a)
np.sum(a)
np.mean(a)
np.std(a)                #标准差
np.transpose(a)          #转置
np.vstack((a,b))               #沿纵轴拼接
np.hstack((a,b))               #沿横轴拼接
np.concatenate((a,b))
np.concatenate((a,b),axis = -1)    #拼接操作,依次对应于上面的两个
np.stack((a,b))       # 不是拼接,是直接增加一个新的维度。比如原来都是二维,现在变成三维
np.arange(9)         #生成 0——8 包含9个元素的数组
np.split(a,3)        #将数组a分成三份
np.ravel(c)          # 展开为一维数组
np.ones((3,3),dtype = np.float)   #生成float型的3X3的纯一数组
np.zeros((3,3),dtype = np.uint8)
np.linspace(0,6,5)      #等差数列,0到6之间取5个数,包括0和6端点值

np.load()
np.save()

np.rot90(a,3)     #将u逆时针旋转90度,旋转3次
np.roll()

 三、线性代数模块——linalg

常用方法:

import numpy as np

np.linalg.norm(a)      # 二范数
np.linalg.det(a)       # 行列式
np.linalg.matrix_rank(a)   # 求矩阵的秩
np.linalg.inv(a)           # 求矩阵的逆
u,v = np.linalg.eig(a)           # 求特征值和特征向量
u,v = np.linalg.eigh(a)          # 同上,只是输出的值的顺序相反
U,s,V = np.linalg.svd(a)         # svd 分解

 四、随机模块——random

常用方法:

import numpy as np
import numpy.random as random

random.rand(1, 3)      # 产生一个1x3数组,值为[0,1)之间的浮点型随机数
random.randn(2,4)      # 产生一个2X4数组,符合标准正态分布,均值为0,方差为一
random.random()        # 产生一个[0,1)之间的浮点型随机数,只产生一个数

#下面四个均是按照指定大小产生[0,1)之间的浮点型随机数array
random.random((3, 3))
random.sample((3, 3))
random.random_sample((3, 3))
random.ranf((3, 3))

# 产生10个[1,6)之间的浮点型随机数
5*random.random(10) + 1
random.uniform(1, 6, 10)

# 产生10个[1,6)之间的整型随机数
random.randint(1, 6, 10)

# 产生5X2的标准正态分布样本
random.normal(size=(5, 2))

# 产生5个,n=5,p=0.5的二项分布样本
random.binomial(n=5, p=0.5, size=5)


a = np.arange(10)
random.choice(a, 7)                     # 从a中有回放的随机采样7个
random.choice(a, 7, replace=False)      # 从a中无回放的随机采样7个
b = random.permutation(a)               # 对a进行乱序并返回一个新的array
random.shuffle(a)                       # 对a进行in-place乱序


# 生成一个长度为9的随机bytes序列并作为str返回
# '\x96\x9d\xd1?\xe6\x18\xbb\x9a\xec'
random.bytes(9)




备注:以上二到四部分参考了这篇文章:       numpy使用

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值