[NumPy] 常用方法速查

本文主要列出np常用的数组函数与方法。

文中前标#的代码表示其不同参数下执行情况。

文中后标#的代码为错误代码。

目录

ndarray数组的创建

ndarry数组属性

切片和索引

# 高级索引

广播

迭代

修改数组

分隔数组

数组元素的添加删除


ndarray数组的创建

#  一维数组

import numpy as np
# 内部元素同类型
arr = np.array([1,2,3,4,5,6])
print(arr)
arr = np.array([1,2,3.,4,5,6])
print(arr)

​

 # 多维数组

# 参数ndmin  维度
arr = np.array([[1,2,3][4,5,6]])
# arr = np.array([1,2,3,4,5,6],ndmin=2)
# arr = np.array([1,2,3,4,5],dtype=np.float32,ndmin=2)
print(arr)

# 结构化数据

student = np.dtype([('name','S20'),('age','i4')])
arr = np.array([('shi',18),('jiang',20)],dtype=student)
print(arr)
arr = np.asarray([1,2,3,4,5])
# arr = np.asarray((1,2,3,4,5))
print(arr)
arr = np.asarray([(1,2,3),(4,5)])
# arr = np.asarray([(1,2,3),(4,5)],dtype=object)
print(arr)

# empty()  创建数组,结果在未初始化时为任意值

arr = np.e,pty([3,2],dtype=int)
print(arr)

# zeros()  创建数组,结果在未初始化时为0

# zeros创建数组与empty相同,数组每个元素值为0
arr = np.zeros([3,2])
print(arr)

# ones()  创建数组,结果在未初始化时为0

arr = np.ones([3,2])
print(arr)

# full()  创建数组,使用参数fill_value指定填充

arr = np.full([3,2],fill_value=8,dtype='f')
print(arr)

# eye()  创造单位矩阵

arr = np.eye(5,dtype='i4')
print(arr)

# arange()  创造一维数组,参数与range()  相同

arr = np.arange(1,11,2)
print(arr)

# formbuffer(buffer, dtype=ofter,count=-1,offset=0)

# buffer 任何对象,以流的方式读入

arr = np.frombuffer(b'jianghua')
# arr = np.frombuffer(b'jianghua',dtype='S1')
# arr = np.frombuffer(b'jianghua',dtype='S1',count=5,offset=2)
print(arr)

# fromiter(iterable,dtype,count=-1)   # iterable 为可迭代对象

arr = np.fromiter(iter([1,2,3,4,5]),dtype='f')
print(arr)

# linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None) 

# 创造等差数列

arr = np.linspace(1,10,10,dtype='f')
# arr = np.linspace(1,11,11,dtype='i4')
# arr = np.linspace(1,11,11,endpoint=False,dtype='i4')
# arr = np.linspace(1,10,10,endpoint=False,retstep=True,dtype='i4')
print(arr)

# logspace(start,stop,num=50,endpoint=True,basr=10.0,dtype=None)

# 创造等比数列

arr = np.logspace(1,10,10,dtype='f')
print(arr)

# 生成 0 - 1 之间的随机数(生成方式左闭右开)

arr = np.random.rand(1)
# arr = np.random.rand(3)
# arr = np.random.rand(3,3)
# arr = np.random.rand(3,3,3)
print(arr)

# 生成 0 - 1 之间的随机数

arr = np.random.random(3)
# arr = np.random.random(3,3)  # 报错
print(arr)

# 随机生成整数

arr = np.random.randit(0,10,5)
print(arr)

# 生成一个或一组 u 分布样本

arr = np.random.randn()
# arr = np.random.randn(5)
# arr = np.random.randn(5,5)
# arr = np.random.randn(5,5,5)
print(arr)

# 生成高斯分布概率密度随机数

# random.normal(loc=0.0,scale=1.0,size=None)

# loc分布均值  scale分布标准差  size输出的shape

arr = np.random.normal(loc=1,scale=2,size=5)
print(arr)

ndarry数组属性

一个维数组就是numpy的轴(axis),轴的数量(维度)叫做秩(rank)

axis = 0 列操作  axis = 1 行操作

# ndim 维度

import numpy as np

arr = np.array([1,2,3,4,5])
# arr = np.array([[1,2,3],[4,5]])
print(arr)
print(arr.ndim)

# shape 数组维度

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

# size 数组元素个数

arr = np.arange(9).reshape(3,3)
print(arr)
print(arr.size)

# dtype 数组元素类型

arr = np.arange(9).reshape(3,3)
print(arr.dtype)

# itemsize 数组元素类型字节数

arr = np.array([[1,2,3],[4,5,6]])
# arr = np.array([[1,2,3],[4,5,6]],dtype='i1')
# arr = np.array([[1,2,3],[4,5,6]],dtype='f')
print(arr.itemsize)

# flags

arr = np.arange(9).reshape(3,3)
print(arr.flags)

切片和索引

arr = np.arange(9)
arr1 = slice(1,5,2)
print(arr[arr1])
print(arr[3])
arr = np.arange(9).reshape(3,3)
print(arr[1][2])

# ... 代表所有

print(arr)
print(arr[...,1])
print(arr[1,...])

# 高级索引

# 取特定行列元素

arr = np.arange(9).reshape(3,3)
print(arr[[0,1,2],[0,1,2]])
print(arr)
rows = np.array([[0,0],[2,2]])
cols = np.array([[0,2],[0,2]])
print(arr[rows,cols])
print(arr)
print(arr[arr>3])
arr = np.array([np.nan,1,2,3,4,np.nan])
print(arr)
print(arr[np.isnan(arr)])
print(arr[~np.isnan(arr)])

广播

# 对不同形状数组进行计算时,算数运算通常在相应元素上进行

# 形状相同

arr1 = np.arange(9)
arr2 = np.arange(9,18)
print(arr1+arr2)

# 形状不同  小扩展到大

arr = np.arange(9).reshape(3,3)
arr1 = np.arrange(3)
print(arr,arr1)
print(arr.shaep,arr1.shaep)
print(arr.nidm,arr1.ndim)
print(arr+arr1)
arr1 = np.tile(arr1,(3,1))
print(arr1)
print(arr+arr1)
arr1 = np.arange(9)
arr1.shape=(3,3)
arr2 = np.arange(5,10)
# print(arr1,arr2)  #会报错

迭代

#  nditer  用作数组迭代  每个元素都可以使用标准Iterator接口访问

arr = arange(9).reshape(3,3)
for x in np.nditer(arr):
    print(x,end=' ') 

# 因为数组和其转置在内存中存储顺序相同

# 所以迭代在数组和其转置是相同的

print (arr)
for x in np.nditer(arr):
    print(x,end=' ')
for x in np.nditer(arr.T):
    print(x,end=' ')

# T.copy()  存储顺序不同,迭代后也不同

print(arr)
arr1 = arr.T.copy(order='C')
print(arr1)
for x in np.nditer(arr1):
    print(x,end=' ')

# 控制遍历顺序

# order='C' 行遍历   'F' 列遍历

arr = np.arange(9).reshape(3,3)
arr1 = arr.T.copy(order='F')
for x in np.nditer(arr):
    print(x,end=' ')
for x in np.nditer(arr1(order='F')):
    print(x,end=' ')

# op_flags = ['remdwrite']  遍历时可改变元素

print(arr)
for x in np.nditer(arr.T,order='F',op_flags=['readwritr']):
    x[...] = x*2
print(arr,end=' ')

# 外部循环

# [external_loop] 遍历后得到数组

arr = np.arange(9).reshape(3,3)
print(arr)
for x in np.nditer(arr,flags=['external_loop']):
# for x in np.nditer(arr,order='F',flags=['external_loop']):
    print(x,end=' ')

# 广播迭代

arr1 = np.arange(9).reshape(3,3)
arr2 = np.arange(3)
# arr2 = np.arange(4)
for a,b in np.nditer([arr1,arr2]):
    print('%d,%d'%(a,b),end='  ')
#     print((a,b),end=' ')

修改数组

arr = anarage(9).reshape(3,3)
arr1 = arr.flatten()
# arr1 = arr.flatten(order='F')
print(arr1)

# ravel 展平数组,返回视图,C修改原数组,F不修改原数组

arr1 = arr.ravel(order='C')
arr2 = arr.ravel(order='F')
print(arr)
print(arr1) 
print(arr2)
arr1[0]=10
arr2[3]=30
print(arr)
print(arr1) 
print(arr2)

# 反转数组

arr = arange(9).reshape(3,3)
arr1 = arr.T
# arr1 = np.transpose(arr)
print(arr1)

# rollaxis()  不好描述,直接看代码

arr1 = np.rollaxis(arr,1)
print(arr1)
arr = anarge(27).reshape(3,3,3)
arr1 = np.rollaxis(arr,1)
print(arr1)
arr2 = np.rollaxis(arr,2)
print(arr2)
arr3 = np.rollaxis(arr,2,start=1)
print(arr3)

# swapaxes() 交换俩轴

arr = arange(9).reshape(3,3)
arr1 = np.swapaxes(arr,0,1)
print(arr1)

# 修改数组维度

# broadcast()

arr1 = np.array([[1],[2],[3]])
arr2 = np.array([1,2,3])
arr = np.broadcast(arr1,arr2)
print(arr.shape)
print(arr)
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))
print(next(arr.iters[0]),next(arr.iters[1]))  # 迭代结束
# print(next(arr.iters[0]),next(arr.iters[1]))  # 报错
arr1 = np.array([[1],[2],[3]])
print(arr1)
arr2 = np.array([1,2,3])
print(arr2)
arr = np.broadcast(arr1,arr2)
print(arr.shape)
# arr = np.empty(arr.shape)
# print(arr)
print(arr1+arr2)

# broadcast_to()  将数组广播到新形状

arr1 = np.broadcast_to(arr1,(3,3))
arr2 = np.broadcast_to(arr2,(3,3))
print(arr1)
print(arr2)

# expand_dims()  指定位置插入轴

arr = np.arange(9).reshape(3,3)
print(arr.shape)
print(arr.ndim)
arr1 = np.expand_dims(arr,axis=0)
# arr1 = np.expand_dims(arr,axis=1)
# arr1 = np.expand_dims(arr,axis=2)
print(arr1)
print(arr1.shape,arr1.ndim)

# squeeze()  删除 axis=1 的维度

arr1 = np.expand_dims(arr1,axis=0)
print(arr1)
print(arr1.shape,arr1.ndim)
arr2 = np.squeeze(arr1)
print(arr2)
print(arr2.shape,arr2.ndim)

# concatenate()  连接数组

arr1 = anarge(9).reshape(3,3)
arr2 = anarge(9,18).reshape(3,3)
#arr = np.concatenate((arr1,arr2),axis=1)
arr = np.concatenate((arr1,arr2),1)
print(arr,arr.shape,arr.ndim)

# stack()堆叠数组 参数与concarenate()相同

arr = np.stack((arr1,arr2))
print(arr,arr.shape,arr.ndim)

# hstack 水平堆叠,形成一个数组

arr = np.hstack((arr1,arr2))
print(arr,arr.shape,arr.ndim)

# vstack 垂直堆叠,形成一个数组

arr = np.vstack((arr1,arr2))
print(arr,arr.shape,arr.ndim)

分隔数组

# split()  返回list

arr = np.arange(9).reshape(3,3)
arr1 = np.split(arr,3)
# arr1 = np.split(arr,4) # 报错
print(arr1)
# arr1 = np.array(arr1)
# print(arr1.shape)
# print(arr1)
arr1 = np.split(arr,[1,2],0)
arr2 = np.split(arr,[1,2],1)
print(arr1)
print(arr2)

# vsplit 水平切割(axis=0)

arr1 = np.vsplit(arr,3)
print(arr1)

# hsplit 竖直切割(axis=1)

arr2 = np.hsplit(arr,3)
print(arr2)

数组元素的添加删除

# resize()

arr = anarge(9).shape(3,3)
arr1 = np.resize(arr,(1,3))
print(arr1)
arr2 = np.resize(arr1,(3,4))
print(arr2)

# append()

print(arr)
arr1 = np.append(arr,[9,10,11])
# arr1 = np.append(arr,[[9,10,11]],0)
# arr1 = np.append(arr,[[9],[10],[11]],1)
print(arr1)

# insert()

print(arr)
arr1 = np.insert(arr,3,9)
# arr1 = np.insert(arr,3,9,0)
# arr1 = np.insert(arr,3,[9,10,11],0)
# arr1 = np.insert(arr,3,[9],1)
# arr1 = np.insert(arr,3,[9,10,11],1)
print(arr1)

# delete()

print(arr)
arr1 = np.delete(arr,3)
# arr1 = np.delete(arr,2,0)
# arr1 = np.delete(arr,2,1)
print(arr1)

# unique() 删除重复元素  参数可一起使用

arr = np.arange(9,18).reshape(3,3)
arr1 = np.resize(arr,(5,5))
arr2 = np.unique(arr1)
# arr2 = np.unique(arr1,return_index=True)# 剩余元素的下标
# arr2 = np.unique(arr1,return_inverse=True)# 剩余元素在原数组中下标
# arr2 = np.unique(arr1,return_counts=True)# 剩余元素在原有个数
print(arr2)

书写匆忙,难免有错,如有发现,万望告知。

Python是一种高级编程语言,具有简单易学、开发效率高等优点,因此在数据处理、科学计算、软件开发等领域得到广泛应用。在Python编程中,经常需要用到各种函数来完成任务。Python常用函数速查手册记录了Python语言中常见的函数及其用法,方便开发者在需要时快速查找资料。 Python常用函数速查手册中包含了常见的内置函数、标准库函数、第三方库函数等。例如,内置函数print()用于输出信息,input()用于获取用户输入信息;标准库中的math库提供了各种数学函数,如计算平方根的sqrt()函数、计算三角函数的sin()、cos()、tan()函数等;常用的第三方库如Numpy、Pandas、Matplotlib等也提供了各种常用函数,用于处理数据、可视化数据等。 Python常用函数速查手册不仅提供了函数名称及简单介绍,还展示了函数的具体用法及相关参数。例如,sum()函数的用法是对可迭代对象求和,可以指定参数start表示求和的初始值;字符串函数split()用于将字符串按指定分隔符切分为列表,可以指定参数maxsplit表示切分次数;文件处理函数open()用于打开文件,支持指定参数mode表示打开文件的模式等。 Python常用函数速查手册的编写是为了提高Python编程的效率,减少开发者的查找工作。使用手册可以让Python开发人员更好地掌握函数的用法,提高编程效率,缩短开发周期,在数据科学、机器学习、Web开发、自然语言处理等领域有着广泛的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值