python学习笔记——numpy

这篇博客详细介绍了Python中numpy库的使用,包括创建数组、数据转换、运算、数组访问、转置、通用函数、数据处理、数学和统计方法、排序、数组的集合运算以及线性代数和随机数生成等核心功能。特别是对np.argsort()函数的运用,它返回数组按升序排序的索引序列。

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

补充

  • tile(val,(x,y))将val内容复制x行,y列。val可以使单个值,也可以是列表
  • shape()查看矩阵或者数组的维数;如果是一个值,返回'()';如果存在x行,y列,返回'(x,y)';含有n个值得一维数组,返回'(n,)'。d.shape、shape(d)
  • np.argsort()返回的是对一个数组按照从小到大排序的索引数组,例
    arr1=np.array([6,5,-7,89,1])
    arr2Index=arr1.argsort()
    print(arr2Index)
  • 输出为:[2 4 1 0 3]也就是对arr1数组从小到大排序,最小的是-7,在原数组中的索引为2,最大的是89,在原数组中
  • 的索引为3,索引返回的排序后的索引序列第一个是2,最后一个是3


————————————————此处为分割线————————————————————

导入numpy

    import numpy as np

创建数组

1.   np.array

np.array接受一切序列型的对象(列表、嵌套列表、数组等),并产生一个数组,并且为这个新建的数组推断出一个较为合适的数据类型(显示说明除外)。每个ndarray对象都必有两个属性shape(数组大小)和dtype(数组类型,数组要求数据是同一类型的)

arr=np.array(n维列表)

arr=np.array([1,2,3])

arr=np.array([[1,2,3],[4,5,6]])

data=[1,2,3]

arr=np.array(data)

2.   其他方式(调用前都需要加np)

zeros、zeros_like

arr=np.zeros(数组长度值)返回的全是0,长度不一样而已

arr=np.zeros((3,6))一个 三行六列的  值为0的数组

zeros_like(arr)返回和arr长度一致的,值均为0的数组

ones、ones_like

arr=np.ones(数组长度值)返回的全是1,长度不一样而已arr=np.zeros((3,6))一个 三行六列的  值为1的数组

ones_like(arr)返回和arr长度一致的,值均为1的数组

empty、empty_like

arr=np.empty()

arr=np.empty((2,3,6))多数情况下返回的是为初始化的垃圾值,2*3*6数组

empty_like(arr)返回和arr长度一致的,值均为0的数组

np.arange(n)

np.eys(n,m)n*m矩阵,对角线为1,其余为0

np.identity(n) n*n矩阵,对角线为1,其余为0

np.arange(n)=python内置的range(n),只不过返回的是数组

 

数据转换

1.  显示转换

2.  Arr2=arr1.astype(待转换的数据类型);arr2.astype(arr1.dtype);astype无论如何都会创建一个新数组

3.  浮点换成小数,小数后面直接省略

运算

1.  大小相等的数组之间的任何运算都会将运算应用到元素级

2.  数值和数组之间的运算,也是作用的数组的元素级

数组访问(索引和切片)

1.    标量值赋给切片时,广播

2.    切片修改会直接反映到源数组上

3.    切片想要实现复制效果,需要显示调用copy(),arr[4:6].copy()

arr3=np.array([[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]]])
print(arr3[1,1,1])
print(arr3[1][1][1])

效果相同

4. 只有冒号’:’表示整个轴区

arr1=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr1[2],'shape',arr1[2].shape)
#[7 8 9] shape (3,)
print(arr1[2,:],'shape',arr1[2,:].shape)
#[7 8 9] shape (3,)
print(arr1[2:,:],'shape',arr1[2:,:].shape)
#[[7 8 9]] shape (1, 3)

5.    通过Bool型索引选取数组中的数据,将总是创建数据副本 ,可用& |  内置的and/or无效

arr1=np.array([[1,2,3],[4,5,6],[7,8,9]])
names=np.array(['mike','kangkan','Bob'])
print(names=='Bob')
#[False False  True]
print(arr1[names=='Bob'])
# [[7 8 9]]
print(arr1[names!='Bob'])
# [[1 2 3][4 5 6]]
print(arr1[~(names=='Bob')])
# [[1 2 3][4 5 6]]

6.    花式索引:利用整数数组进行索引,将数据复制到新数组中

import numpy as np
arr1=np.arange(32).reshape(8,4)
print('数组',arr1)
#选取行
print('选中的行为:',arr1[[1,5,7,4,3]])
print('这是选行:',arr1[[1,2]])
print('这是选值:',arr1[1,2])
print('*********选(1,2)、(2,)、(3,3)、(6,0)**********')
print(arr1[[1,2,3,6],[2,1,3,0]])
print('*********选1236行,并按2130列的顺序展示***********')
print(arr1[[1,2,3,6]][:,[2,1,3,0]])
print('*********选1236行,并按2130列的顺序展示***********')
print(arr1[np.ix_([1,2,3,6],[2,1,3,0])])


转置

1.    一二维数组,可以使用arr.T

2.    转置返回的是源数据的视图,不进行任何复制操作

3.    高维数组,transpose需要用到一个由轴编号组成的元组,才能进行转置。

4.    arr.swapaxes()要求给定一对轴编号,根据编号进行轴对换

通用函数

对数组执行元素级运算,诸如np.arange()、np.exp()、np.add()、np.maximum()等返回一个数组

也有一些返回多个数组,如np.modf(arr),返回的就是浮点数的整数和小数两个部分的数组

import numpy as np
a1=np.arange(10)
a2=np.arange(5,15)
print(a1)
print('******一元运算*******')
print('平方根',np.sqrt(a1))
print('平方',np.square(a1))
print('指数e^x',np.exp(a1))
print('对数log(1+x)',np.log1p(a1))
print('各元素的正负号',np.sign(a1))
print('各元素大于等于该值的最小整数',np.ceil(a1))
print('各元素小于等于该值的最大整数',np.floor(a1))
print('各元素四舍五入到最接近的整数',np.rint(a1))
print('返回小数和整数2个数组',np.modf(a1))
print('返回那些是nan的布尔型数组',np.isnan(a1))
print('返回小数和整数2个数组',np.modf(a1))
print('三角函数',np.sin(a1))
print('not x的真值',np.logical_not(a1))
print('******二元运算*******')
print('对应元素相加',np.add(a1,a2))
print('a1减去a2对应元素',np.subtract(a1,a2))
print('对应元素相乘',np.multiply(a1,a2))
print('a1除a2对应元素类似于/',np.divide(a1,a2))
print('a1向下圆整除a2对应元素(丢弃余数),类似于//',np.floor_divide(a1,a2))
print('元素级求余',np.mod(a1,a2))
print('a1对应元素的a2次方',np.power(a1,a2))
print('对应元素最大值',np.maximum(a1,a2))
print('对应元素最小值',np.minimum(a1,a2))
print('第二个数组中值的符号复制给第一个数组中的值',np.copysign(a1,a2))
print('>=返回布尔型数组',np.greater_equal(a1,a2))
print('<返回布尔型数组',np.less(a1,a2))
print('逻辑运算 &',np.logical_and(a1,a2))
print('逻辑运算 ^',np.logical_xor(a1,a2))
print('逻辑运算 |',np.logical_or(a1,a2))


数据处理

a1=np.arange(10)
a2=np.arange(5,15,1)
x,y=np.meshgrid(a1,a1)

np.meshgrid()接收两个一元数组,返回两个二维矩阵

Np.where()

Np.where(con,x,y)

当con为真时,取x的值,否则取y的值;x和y可以数组,也可以是数值

功能类似于 python的三元表达式:x if con else y

数学和统计方法

np.mean(arr)/

arr.mean

np.mean(arr)、arr.mean()求数组所有值的均值,arr.mean(axis=1),求每行的均值,arr.mean(axis=0)求每一列的均值,零长度的数组为NaN

np.sum(arr)/

arr.sum

arr.sum()求总和,arr.sum(0)竖向求和,arr.sum(1)横向求和,零长度的数组为0

np.cumsum(arr) /

arr.cumsum()

arr.cumsum()所有元素的累积和,arr.cumsum(0),竖向累积求和,arr.cumsum(1),横向累积求和

np.cumprod(arr)/

arr.cumprod()

arr.cumprod()所有元素的累积积,arr.cumprod(0),竖向累积求积,arr.cumprod()(1),横向累积求积

类似的还有 std()标准差、var()方差、max()最大值、min()最小值、argmax()最大值索引、argmin()最小值索引

l  用于布尔型数组的方法

Any()

any()是否存在一个或多个True(非布尔型数组,大于0都是True)

All()

all()是否所有值都是True(非布尔型数组,大于0都是True)


 排序

arr.sort()排序,arr.sort(0)竖向排序,arr.sort(1)横向排序。直接修改原来的数组

arr1=np.sort(arr),返回的是已排序的副本,不影响源数组,默认按行排序

数组的集合运算

arr1=np.array([1,2,5,8,9,6,5,4,1,3,2])
arr2=np.array([4,5,6])
print('arr1',arr1)
print('arr2',arr2)
print('找出唯一元素,返回排序后的结果',np.unique(arr1))
print('交集,返回排序后的结果',np.intersect1d(arr1,arr2))
print('并集,返回排序后的结果',np.union1d(arr1,arr2))
print('是否包含,返回布尔型数组',np.in1d(arr1,arr2))
print('集合的差,即在第一个,不在第二个数组中的元素',np.setdiff1d(arr1,arr2))
print('对称差,在一个数组,不同时在两个数组中,即并集减去交集的部分',np.setxor1d(arr1,arr2))

线性代数

随机数生成



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值