首页 > 其他分享 >《你敢不学习?》numpy库——细细学<4>

《你敢不学习?》numpy库——细细学<4>

时间:2024-07-24 18:59:53浏览次数:10  
标签:语句 细细 True 学习 print 数组 time np numpy

一、numpy库的一些常用函数

1、np.tile(A,reps) :

        将数组的数据按照行列复制扩展,A为需要复制的数组,rep为:重复次数,可以是整数,表示沿每个维度重复的次数;也可以是元组,每个元素表示对应维度重复次数

a = np.arange(4)
#复制2次
np.tile(a,2)
#行列复制
np.tile(a,(3,2))

2、np.repeat(A,n):A 数组,复制n次

a = np.arange(1,13).reshape(3,4)
np.repeat(a,2)
np.repeat(a,2,axis=0)
np.repeat(a,2,axis=1)
        将数组中的每个元素重复若干次

3、np.roll(A,n,axis) :A表示数组,n表示移位次数,axis表示沿什么轴移动

        沿指定轴对数组元素进行移位

#一维数组
#向后调3个
np.roll(a,3)
#向前调2个
np.roll(a,-1)
#二维数组
np.roll(aa,2)
np.roll(aa,2,axis=0)

        

4、resize(A,n) :A表示数组,n表示要变成的形状

重新调整数组的大小,如图所示将三行三列的数组a改变成一行九列数组

aa.reshape(4,3)#修改维度,元素个数必须相同
np.resize(aa,(5,6)) #resize重新调整数组的大小,元素个数可以不相同

5、place(A,B,C)/put(A,D,C):A为数组,B为条件,C为替换的值,D为指定的元素位置

将数组中满足条件的元素/指定的元素替换为指定的值

aa = np.random.randint(40,100,(3,4))
#小于60分的 全部替换为0
np.place(aa,aa<60,0)

#put()指定的索引处的元素替换为指定的值
aa = np.arange(1,13).reshape(3,4)
np.put(aa,2,100)

6、np.savetxt():将数据保存到txt文件中

运行以下代码,即在代码目录保存自定义命名的文件,注意需要指定数字保存格式

#保存
a = np.random.randint(-50,100,1000)
np.savetxt('savetxt.txt',a,fmt='%d')

7、np.loadtxt() :从文件中加载数据

b = np.loadtxt('savetxt.txt',dtype=int)
print(b)

此处需写入文件地址,我写的文件与代码在同一目录

8、np.genfromtxt():根据文件内容中生成数据,可以指定缺失值的处理等

        示例: 假设有一个名为data.txt的文本文件,内容如下: 1,2,3 4,5,6 7,8,9

        可以使用np.genfromtxt()读取该文件并生成一个numpy数组:         

        data = np.genfromtxt('data.txt', delimiter=',')

        print(data)

        输出结果为: [[1. 2. 3.] [4. 5. 6.] [7. 8. 9.]]

9、np.dot(A,B):矩阵相乘

#dot函数 矩阵相乘
x = np.array([[1,2],[3,4]])
y = np.array([[2,3],[1,2]])
x.dot(y)
x.dot(3) #每个元素与3相乘

即矩阵的行乘以另一个矩阵的列

10、np.sort():排序

一维数组排序:

a=np.array([5,2,4,6,1,9])
print('sort排序后:',np.sort(a))
print('argsort排序:',np.argsort(a))

二维数组排序:

np.random.seed(44)
a=np.random.randint(100,size=(4,6))

#直接使用sort排序指定axis的值

print(np.sort(a,axis=0))
print(np.sort(a,axis=1))

 对数组进行排序,返回一个新的排好序的数组,原数组不变

11、np.argsort() :返回的是数组值从小到大排序后元素对应的索引值

即排序后原数组不变,输出排序完成数组的索引值,并且以数组形式打印

12、any / all :

any:如果数组中存在一个为 True 的元素(或者能转为 True 的元素),则返回True all:如果数组中所有元素都为 True (或者能转为 True 的元素),则返回 True
#any函数 只要有一个元素为True,则结果返回True
#all函数 只有所有元素都为True,则结果返回True
x = np.array([False,True,True,1,None,0])
np.any(x)
np.all(x)

13、numpy 广播机制

两个数组相加:

import numpy as np
# 在numpy中存在广播机制
a=np.array([0,1,2])
print(a+5)
b=np.array([5,5,5])
print(a+b)
维度不相同的数组相加:
a=np.arange(3) #一行[0 1 2]
b=np.arange(3).reshape(3,1)  #三行1列
print(a+b)
广播的规则 1 ,如果两个数组维度个数不同,那么小维度的数组形状会在左边补1 2 ,如果两个数组形状在任何一个维度上都不匹配,数组的形状会沿着维度为1 的维度扩展到匹配上另一个数组的形状 3 ,如果没有维度形状为 1 ,则会引发异常
a = np.arange(6).reshape(2, 3)
b = np.arange(6).reshape(3, 2)
print(a + b)

14、比较掩码

        比较操作,会返回与参与运算数组形状相同的数组,其中,满足条 件的为 True ,不满足的为 False

数组的比较操作:

a=np.array([[1,2,30],[45,67,89]])
print(a<60)
传入的数组,需要和 a 形状一致,且类型为 Bool 类型,这个叫做掩码式索引 掩码式索引取值,过滤掉不符合条件的:
print(a[np.array([[ True , True , True],[ True, False, False]])])
print(a[a<60])

取出元素大于50的:

np.random.seed(42)
a=np.random.randint(100,size=(3,4))
#取出数组中元素值大于50的
print(a[a>50])

15、魔法命令time

        魔法命令是ipython 提供特殊命令,能实现一些特殊功能,比如统计时间(time/timeit) 和占用内存 (memit/mprun) 等功能。         魔法命令两种形式:%:行模式 ,%%:单元格模式         time 统计语句执行时间,被统计语句只执行一次。
# 统计time.sleep(0.5)语句执行时间
import time
start = time.time()
time.sleep(0.5)
end = time.time()
end-start

        

16、魔法命令timeit

        timeit可以循环多次执行被统计语句,得到平均执行时间,支持行模式和单元格模式。         timeit命令参数, -n 指定每轮测试次数, -r 指定测试轮数(默认为7) 单元格模式: 1、第一行语句(与 timeit 同一行语句)为初始化语句,作用为后续代码中变量提供初始化功能。 2、初始化语句执行次数由轮数来决定。 3、 初始化语句每轮测试只执行一次,且不参与计时。第二行至整个单元格末尾语句会执行相应次数, 并参与计时。
# 46.1 ns ± 2.75 ns per loop (mean ± std.dev. of 7 runs, 10000000 loops each)
# 7 runs 运行7轮
# 10000000 loops 每轮循环执行次数
# 46.1 ns ± 2.75 ns per loop (mean ± std 均值是46.1 标准差是2.75 ns 【46.1 ns - 2.75,46.1ns + 2.75】
%timeit a=1
# -n 每轮循环的次数
# -r 执行轮数 默认是7轮
%timeit -n 1000 -r 2 a=1
%%timeit -n 2 -r 2
time.sleep(0.5)
time.sleep(0.6)
%%timeit -n 2 -r 3 print('初始化语句')
print('hello world')

%%timeit a = np.arange(100000)
# 1ms=1000us
a+=1

17、魔法命令writefilerun

        writefile将单元格内容写入到文件中。如果文件不存在则创建,如果文件存在,则覆盖文件。如果指定-a 参数,则追加内容,不覆盖。

如下创建写文件text.py

%%writefile test.py
x= 1
print(x)
print('hello world')

后面再次运行这段代码,则覆盖之前的内容

%%writefile -a  test.py
print('update....')
run:         运行外部python 文件,运行结束后,外部文件中定义的变量得到保留。 其语法格式为:
%run test.py
a #使用文件中定义的变量

18、魔法命令memit

        分析语句内存使用情况。memit 支持行模式与单元格模式。单元格模式下,初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存。

%load_ext memory_profiler
#分析函数
def m1():
    print('hello world')
%memit m1()
# 分析语句
%memit x=2

二、至此 numpy中的用法已经基本讲完了,剩下的就靠大家自己去运用了,加油!

标签:语句,细细,True,学习,print,数组,time,np,numpy
From: https://blog.csdn.net/qq_64603703/article/details/140661829

相关文章

  • 基于CAT的VBM和SBM计算学习笔记(一)VBM
    前言  基于体素的形态学方法(voxel-basedmorphometry,VBM),是大脑结构研究中最常见的指标。我刚开始学习fMRI数据处理时主要都聚焦在功能差异的研究,但接触了一批受外伤的被试,对其脑结构的改变产生兴趣,遂学习之。 VBM用T1计算,稳定性强;覆盖全脑,全面性强;而且其计算软件发......
  • 网络规划设计师-日常学习3-VLAN部分
    VLAN1、定义:VLAN是在交换机或路由器上创建的一组逻辑上分离的网络,即使它们共享相同的物理媒介(例如以太网)。2、工作原理VLAN通过将网络设备按照逻辑需求而不是物理位置来划分,实现逻辑上的隔离和分组。每个VLAN有其自己的广播域,因此广播和多播流量不会跨越VLAN传播,从而减少网......
  • FreeModbus学习——eMBInit初始化
    FreeModbus版本:1.6在mb.c文件中先看一下静态变量的定义/*-----------------------Staticvariables---------------------------------*/staticUCHARucMBAddress;staticeMBModeeMBCurrentMode;ucMBAddress是从机地址,eMBCurrentMode是Modbus的工作模式,如......
  • FreeModbus学习——eMBPoll轮询
    FreeModbus版本:1.6eMBPoll在mb.c文件中eMBPoll函数是一个核心的Modbus协议栈事件处理函数,负责接收和发送帧,处理不同的事件,并根据需要返回错误码。eMBErrorCodeeMBPoll(void){staticUCHAR*ucMBFrame;//接收到的帧数据staticUCHARucRc......
  • kaggle竞赛宝典 | 时序表示学习的综述!
    本文来源公众号“kaggle竞赛宝典”,仅用于学术分享,侵权删,干货满满。原文链接:时序表示学习的综述!1 介绍本文综述了时间序列数据中的通用表示学习方法,提出了一种新颖的分类方法,并讨论了其对提高学习表示质量的影响。文章全面回顾了各种神经网络架构、学习目标和数据相关技术......
  • VDM学习笔记
    摘要在基本理解着证据下界和VAE后,学习VDM,主要是想自己理解顺畅整个模型的思路和推导过程(done)。内容组织:首先从宏观感受VDM的模型架构,并与HVAE进行比较,基本理解;然后讲解自己理解的整个模型建模过程和原因(《事后诸葛》,为了自己理解);指出VDM的三个重要等价解释,着重Score-Base......
  • 学习pcie—20240724
    因为前一段时间看了xdma的IP核手册,发现只看xdma看不太懂,不清楚pcie的传输的流程,不了解报文格式,所以看看pcie手册,主要关注发送接收时序首先是pcieIP核与xdmaIP核的区别:IntegratedBlockforPCIExpress:7SeriesIntegratedBlockforPCIExpress是最基础的PCIeIP,实现的是......
  • 泰凌微8258学习日记-6:LCD屏幕的点亮以及使用
            点亮LCD对我而言算是比较难的操作了,在了解到LCD点亮的步骤以后(开SPI,导入LCD驱动,主函数调用),我开始学习LCD的引脚功能,SPI如何使用,后面拿到中景园给的LCD例程(STM32的),修改LCD驱动(这一步是最难的)。好在有位大哥帮我,也是顺利完成了驱动的修改。......
  • Markdown学习
    Markdown学习标题一级标题:#加空格(ctrl+1)注:不打空格可以在设置里将严格模式取消二级标题:##加空格(ctrl+2)三级标题:###加空格(ctrl+3)以此类推字体粗体:句子两边加两个星号,“**”(ctrl+b)Hello,World!斜体:句子两边加一个星号,“*”(ctrl+i)Hello,World!下划线:句子左边输入“”​......
  • 线段树扩展学习
    前言来补一下暑期集训的坑。正文标记可持久化这个很好理解,在进行区间修改的时候,不下传懒标记,查询的时候直接对每一层再进行处理即可。这个主要用于线段树分治,所以理解就行,代码不给了。动态开点之前一直不太会,现在来补一下。这种线段树主要用于优化空间复杂度。就是对于下......