Numpy基础

目录:

  • 一、简介:
  • 二、array数组ndarray:
    • 1.array( )创建数组:
    • 2.数组赋值和引用的区别:
    • 3.arange( )创建区间数组:
    • 4.linspace( )创建等差数列:
    • 5.logspace( )创建等比数列:
    • 6.zeros( )创建全0数组:
    • 7.ones( )创建全1数组:
    • 8.NumPy数组属性:
      • (1)shape属性:
      • (2)reshape属性:调整数组维度
    • 9.一维数组切片、索引操作:
    • 10.二维数组切片、索引操作:
    • 11.整数数组索引:
      • (1)一次性取多个元素,返回一维数组:
      • (2)一次性取多个元素,将待返回的一维数组重整成二维数组返回:
      • (3)一次性取连续的多行多列元素,返回二维数组:
      • (4)取特定行特定列不连续元素,返回二维数组:
    • 12.布尔数组索引:
      • (1)以数组形式返回数组x>6的元素:
      • (2)以数组形式返回数组中奇数的元素:
      • (3)根据True|False返回数组中符合要求的元素数组:
          • 取行:
          • 取列:
  • 三、广播机制:
  • 四、numpy统计:
    • 1.平均值:
    • 2.中位数:
    • 3.标准差:
    • 4.方差:
    • 5.最大值:
    • 6.最小值:
    • 7.加权平均值:
  • 五、自定义结构化数据类型:
        • *注:数据类型别名:*
  • 六、文件操作:
    • 1.读取普通文本文件:
    • 2.读取csv文件:
    • 3.读取不同列表示不同信息文件:
    • 4.空数据处理:
  • 七、随机数:
  • 八、numpy常用函数:
    • 1.resize( ):
    • 2.unique( ):
    • 3.sort( ):

一、简介:

  • 是Python 科学计算库,方便对数组、矩阵进行计算,包含大量线性代数、傅里叶变换、随机数等大量函数。
  • 直接以数组、矩阵为粒度计算并支撑大量的数学函数,效率高
  • 各种数据科学类库(Scikit-Learn、TensorFlow、Pandas)等的基础库

二、array数组ndarray:

1.array( )创建数组:

参数

import numpy as np
my_list = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]
]
#先将my_list二维数组元素强转为float型,然后是用该数组创建二维ndarray数组
my_ndarray = np.array(my_list,float,ndmin=2)
print(my_ndarray)

在这里插入图片描述

2.数组赋值和引用的区别:

#1.引用机制(指针)
my_ndarray_copy = my_ndarray
print('my_ndarray的内存地址:',id(my_ndarray))
print('my_ndarray_copy的内存地址:',id(my_ndarray_copy))#2.拷贝机制
my_ndarray_copy = np.array(my_ndarray)
print('my_ndarray的内存地址:',id(my_ndarray))
print('my_ndarray_copy的内存地址:',id(my_ndarray_copy))

在这里插入图片描述

3.arange( )创建区间数组:

在这里插入图片描述

a = np.arange(10,20,2,dtype=float)
print(a)

在这里插入图片描述

4.linspace( )创建等差数列:

等差数列在线性回归经常用作样本集

在这里插入图片描述

#创建起始值为0,终止值为100,样本数量为11的等差数列数组
b = np.linspace(0,100,11,dtype=int)
print(b)

在这里插入图片描述

5.logspace( )创建等比数列:

在这里插入图片描述

#首先将1-5区间均匀取3个数X(1,3,5),然后创建int型等比数列,元素值为X^base(起始值为1^2,终止值为5^2)
c = np.logspace(1,5,3,base=2,dtype=int)
print(c)

在这里插入图片描述

6.zeros( )创建全0数组:

在这里插入图片描述

'''
第一个参数:(a)表示a个元素的一维数组(a,b)表示a行b列的二维数组(a,b,c)表示a块,每块b行c列的三维数组	
'''
#创建2行2列的全0数组
d = np.zeros((2,2),dtype=int)
print(d)

在这里插入图片描述

7.ones( )创建全1数组:

参数同全0

'''
第一个参数:(a)表示a个元素的一维数组(a,b)表示a行b列的二维数组(a,b,c)表示a块,每块b行c列的三维数组	
'''
#创建2行2列的全1数组
e = np.ones((2,2),dtype=int)
print(e)

在这里插入图片描述

8.NumPy数组属性:

在这里插入图片描述

(1)shape属性:

  • shape返回值:
    • (a)表示a个元素的一维数组
    • (a,b)表示a行b列的二维数组
    • (a,b,c)表示a块,每块b行c列的三维数组

(2)reshape属性:调整数组维度

返回调整维度后的副本,而不改变原ndarray

f = np.arange(20).reshape(4,5)
print(f)

在这里插入图片描述

9.一维数组切片、索引操作:

在这里插入图片描述

  • 冒号::解释
    • [2]将返回与该索引相对应的单个元素
    • [2:7]将返回两个索引之间的元素,不包括停止索引
    • [2:]表示从该索引开始以后的所有元素都将被提取
    • [:7]表示该索引之前的所有元素都将被提取
    • [::-1]表示取反,从后往前取所有元素,步长为-1
a1 = np.arange(10)
print(a1)
#切片操作(注意是引用,a1、a2实际上指向同一片内存空间)
a2 = a1[2:7:2]
print(a2)#理解引用机制,并理解索引=数组下标=位序-1,
a2[1]=888
print(a1)
print(a2)

在这里插入图片描述

10.二维数组切片、索引操作:

在这里插入图片描述

  • 冒号::解释
    • [2]将返回一维数组
    • [2][2]将返回特定元素
    • [2:7]将返回两个索引之间的一维数组集,即返回一个二维数组,不包括停止索引
    • [2:]表示从该索引开始以后的所有一维数组集,即返回一个二维数组都将被提取
    • [:7]表示该索引之前的所有一维数组集,即返回一个二维数组都将被提取
    • [...][1]表示[…]先取所有行即取所有元素,[1]再取所有行的第二行一维数组
    • [2,2]将返回特定元素
    • [...,1]或[:,1]返回第二列元素,组成一个一维数组返回
    • x[...,1:]返回第二列之后的所有列,组成一个二维数组返回

11.整数数组索引:

(1)一次性取多个元素,返回一维数组:

x = np.array([[1,2],[3,4],[5,6]
])
#[0,0,2]是行索引,[0,1,1]是列索引,表示取[0,0]、[0,1]、[2,1]的元素,组成一维数组返回
y = x[[0,0,2],[0,1,1]]
y

在这里插入图片描述

(2)一次性取多个元素,将待返回的一维数组重整成二维数组返回:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
#行索引
r = np.array([0,0,0,2])
#列索引
c = np.array([0,1,2,2])
#x[r,c]根据索引获取一维数组,reshape(2,2)将返回的4*1一维数组转为2*2的二维数组
s = x[r,c].reshape(2,2)
s

在这里插入图片描述

(3)一次性取连续的多行多列元素,返回二维数组:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
#行取2行3行,列取2列3列
y = x[1:3,1:3]
y

在这里插入图片描述

(4)取特定行特定列不连续元素,返回二维数组:

#取1,3行、1,3,4列所有元素
x = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]
])
#先取1,3行,:可以换成...
temp = x[[0,2],:]
#再根据上一步结果取1,3,4列,:可以换成...
temp[:,[0,2,3]]

在这里插入图片描述

12.布尔数组索引:

  • 返回的结果需要经过布尔运算时,会使用到另一种高级索引方式,即布尔数组索引。

(1)以数组形式返回数组x>6的元素:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
# 
x[x>6]

在这里插入图片描述

(2)以数组形式返回数组中奇数的元素:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
#将数组中所有奇数置为-1(x[x%2!=0]获取奇数,=-1赋值)
x[x%2!=0] = -1
x

在这里插入图片描述

(3)根据True|False返回数组中符合要求的元素数组:

取行:
x = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]
])
row = np.array([False,False,True])
print(x[row,...])

在这里插入图片描述

取列:
column = np.array([True,False,True,False])
x = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]
])
print(x[...,column])

在这里插入图片描述

三、广播机制:

  • 广播是numpy对不同形状的数组进行数值计算的方式,对数组的算术运算通常在相应的元素上进行。
    • (1)若两个数组形状相同,那么两个数组相乘即为数组对应位置元素相乘
    • (2)若两个数组形状不同,那么两个数组相乘就需要使用广播机制。
  • 广播机制的核心是对形状较小的数组,在横向或纵向的进行一定次数的重复,使其与形状较大的数组具有相同的维度后相加

在这里插入图片描述

  • 广播的规则:
    • 输出数组的形状是是输入数组形状的各个维度上的最大值。
    • 如果输入数组的某个维度和输出数组的对应维度的长度相同或输入数组的某个维度的长度为1时,这个输入数组能够用来计算,否则不能运算。
    • 输入数组的某个维度的长度为1时,沿着此维度运算时都用此维度上的第一组数组值。

四、numpy统计:

1.平均值:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
#计算所有元素平均值
print(x.mean())
#从上至下计算每列平均值,返回一维数组
print(x.mean(axis=0))
#从左至右计算每行平均值,返回一维数组
print(x.mean(axis=1))

在这里插入图片描述

2.中位数:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.median(x)

在这里插入图片描述

3.标准差:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.std(x)

在这里插入图片描述

4.方差:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.var(x)

在这里插入图片描述

5.最大值:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.max(x)

在这里插入图片描述

6.最小值:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.min(x)

在这里插入图片描述

7.加权平均值:

x = np.array([[1,2,3],[4,5,6],[7,8,9]
])
np.average(x)

在这里插入图片描述

五、自定义结构化数据类型:

#创建结构体
teacher = np.dtype([#(变量名称,变量数据类型->"数据类型别名+所占字节数")("name","U8"),("age","i1"),("salary","f4")
])
#创建数组,数组元素为teacher类型
b = np.array([("clh",20,30000),("ccc",18,10000)],dtype = teacher
)
print("数组b内容为:",b)
print("数组中所有name:",b["name"])

在这里插入图片描述

注:数据类型别名:

在这里插入图片描述

六、文件操作:

在这里插入图片描述
注意:skiprows不忽略注释行和空白行,从文档第一行跳过

1.读取普通文本文件:

  • 文本文件一般用空格分隔数据
    在这里插入图片描述
data = np.loadtxt("data.txt",dtype=np.int32)

2.读取csv文件:

  • csv文件是以逗号分隔的文本文件
    在这里插入图片描述
data = np.loadtxt("data.csv",dtype=np.int32,delimiter=",")

3.读取不同列表示不同信息文件:

在这里插入图片描述

 #1.定义结构体
user_info = np.dtype([("name","U10"),("age","i1"),("gender","U1"),("height","i2")]
)
#2.用结构体类型接数据,并且使用skiprows跳过第一行不读
data = np.loadtxt("data.txt",dtype=user_info,skiprows=1,encoding="utf-8")

4.空数据处理:

#使用异常机制
def parse_age(age):try:return int(age)except:return 0
#converters调用自定义函数进行空数据处理        
data = np.loadtxt("data.csv",delimiter=",",usecols=1,converters={1:parse_age})  

七、随机数:

'''
(a)表示a个元素的一维数组
(a,b)表示a行b列的二维数组
(a,b,c)表示a块,每块b行c列的三维数组
'''#创建[0,1)内给定维度的随机数组,该组元素符合正态分布
np.random.rand(3,3)#返回5*5个[1,5)内的随机整数
np.random.randint(1,5,size=(5,5))

八、numpy常用函数:

在这里插入图片描述

1.resize( ):

#元素不够时使用原数组数据补齐
a = np.array([1,2,3,4,5,6,7,8,9])
np.resize(a,(4,4))

在这里插入图片描述

#元素不够时使用0补齐
a = np.array([1,2,3,4,5,6,7,8,9])
a.resize((4,4),refcheck=False)
a

在这里插入图片描述

2.unique( ):

#去重+排序,返回去重后的数组+元素所在原数组的索引+各元素重复次数
a = np.array([2,3,4,5,6,1,2,3])
b,indices,nums = np.unique(a,return_index=True,return_counts=True)
print(b)
print(indices)
print(nums)

在这里插入图片描述

3.sort( ):

#结构体
teacher = np.dtype([#(变量名称,变量数据类型)("name","U8"),("age","i1"),("salary","f4")
])
#创建数组,数组元素为teacher类型
b = np.array([("clh",20,30000),("ccc",18,10000)],dtype = teacher
)
#按年龄排序
np.sort(b,order="age")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

半导体设备系列:半导体制造产能扩张,设备零部件需求旺盛

近年来国内半导体制造产能不断扩张,半导体设备厂商加速成长。我们认为下游发展将拉动上游本地化配套需求,半导体设备零部件迎来高增长阶段。 摘要 半导体设备零部件包含密封圈、EFEM、射频电源、静电吸盘、硅电极、真空泵、气体流量计、喷淋头等产品&a…

python数据分析之交叉验证

python数据分析之交叉验证 1、常用的分类算法 有监督:SVM向量机、梯度提升、决策树(随机森林)、朴素贝叶斯、逻辑斯蒂回归、神经网络(cnn、rnn) 无监督:k-means、隐马尔可夫 2、数据分析过程 1、采集数据 2、数据预处理 3、特征选择 4、模型训练、评估、保存 5、模型…

JVM虚拟机:各种JVM报错总结

错误 java.lang.StackOverflowError java.lang.OutOfMemoryError:java heap space java.lang.OutOfMemoryError:GC overhead limit exceeded java.lang.OutOfMemoryError:Direct buffer memory java.lang.OutOfMemoryError:unable to create new native thread java.lang.OutOf…

时间计算总结

文章目录 1.1:Java 获取两个时间的时间差(时、分、秒):依赖:方法的说明方法测试 2.1 获取当天的开始时间2.2 获取当天的结束时间2.3 获取昨天的开始时间2.4 获取昨天的结束时间2.5 获取明天的开始时间2.6 获取明天的结束时间2.7 获取本周的开…

第3章 【课后习题】(完整版)

【3.18】写出下面程序的运行结果 //3.18写出下面程序的运行结果 #include <iostream> using namespace std; class test{public:test();~test() {};private:int i; }; test::test() {i25;for(int ctr0;ctr<10;ctr){cout<<"Counting at "<<ctr…

深入浅出:理解 JavaScript 中的 Promise.all()

在现代的 JavaScript 开发中&#xff0c;异步编程是一个无法避免的话题。无论是处理网络请求&#xff0c;用户输入&#xff0c;还是文件操作&#xff0c;异步编程都扮演着核心角色。ES6 引入的 Promise 极大地简化了异步操作&#xff0c;而 Promise.all() 则为处理多个并行的异…

线程的深入学习(二)

前言 上一篇讲了线程池的相关知识&#xff0c;这篇文章主要讲解一个 1.并发工具类如CountDownLatch、CyclicBarrier等。 2.线程安全和并发集合&#xff1a; 3.学习如何使用Java提供的线程安全的集合类&#xff0c;如ConcurrentHashMap、CopyOnWriteArrayList等。 并发工具类 …

Linux学习记录——삼십삼 http协议

文章目录 1、URL2、http协议的宏观构成3、详细理解http协议1、http请求2、http响应1、有效载荷格式2、有效载荷长度3、客户端要访问的资源类型4、修改响应写法5、处理不同的请求6、跳转 3、请求方法&#xff08;GET/POST&#xff09;4、HTTP状态码&#xff08;实现3和4开头的&a…

uniapp中用户登录数据的存储方法探究

Hello大家好&#xff01;我是咕噜铁蛋&#xff01;作为一个博主&#xff0c;我们经常需要在应用程序中实现用户登录功能&#xff0c;并且需要将用户的登录数据进行存储&#xff0c;以便在多次使用应用程序时能够方便地获取用户信息。铁蛋通过科技手段帮大家收集整理了些知识&am…

每天五分钟计算机视觉:揭秘迁移学习

本文重点 随着人工智能的迅速发展,深度学习已经成为了许多领域的关键技术。然而,深度学习模型的训练需要大量的标注数据,这在很多情况下是不现实的。迁移学习作为一种有效的方法,可以在已有的数据和模型上进行训练,然后将其应用于新的任务。这种方法大大降低了对新任务的…

嵌入式(一)嵌入式系统介绍 | 嵌入式微处理器,嵌入式系统开发流程,嵌入式系统应用

文章目录 1 嵌入式系统基本介绍1.1 基本概念1.2 嵌入式微处理器分类1.2.1 微控制器MCU1.2.2 微处理器MPU1.2.3 数字信号处理器&#xff08;DSP&#xff09;1.2.4 混合处理器和片上系统&#xff08;SOC&#xff09;1.2.5 可编程片上系统&#xff08;SOPC&#xff09; 1.3 嵌入式…

书香之家 国学启智——学夫堂幼儿国学托管永嘉上塘实验店启航

在教育创新的道路上&#xff0c;学夫堂幼儿国学托管永嘉上塘实验店迎来了一个重要的时刻。经过三个多月的精心筹备和试运营&#xff0c;今天正式宣布学夫堂幼儿国学托管在永嘉县城北街道景和佳苑8幢105号开门迎客。 学夫堂深信&#xff0c;国学智慧不仅是中华文化的瑰宝&#x…

7-34 通讯录的录入与显示 分数 10

文章目录 每日一言题目输入格式&#xff1a;输出格式&#xff1a;输入样例&#xff1a;输出样例&#xff1a; 结语 每日一言 批判的武器当然不能代替武器的批判。 --〈黑格尔法哲学批判〉导言 题目 通讯录中的一条记录包含下述基本信息&#xff1a;朋友的姓名、出生日期、性别…

C++ const 限定符的全面介绍

C const 限定符的全面介绍 1. const 修饰基本数据类型 定义 const 修饰的基本数据类型变量&#xff0c;值不可改变。 语法 const type variable value;特点 不可变性&#xff0c;增加代码可读性。 作用 定义不可修改的常量。 使用场景 全局常量、配置项。 注意事项…

常见函数的4种类型(js的问题)

• 匿名函数 • 回调函数 • 递归函数 • 构造函数 1、匿名函数 定义时候没有任何变量引用的函数 匿名函数自调&#xff1a;函数只执行一次 (function(a, b){console.log(a b);} )(1, 2);// 等价于 function foo (a, b){console.log(a b); }foo(1, …

阿赵UE学习笔记——7、导入资源

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次将会把一个带动作和贴图的钢铁侠模型&#xff0c;导入的UE的项目中。 1、准备的资源 这里有2个fbx文件&#xff0c;都是带着网格和动画的&#xff0c;模型网格和骨骼是一样的&#xff0c;只…

MySQL是如何做到可以恢复到半个月内任意一秒的状态的?

MySQL的逻辑架构图 MySQL中两个重要的日志模块&#xff1a;redo log&#xff08;重做日志&#xff09;和binlog&#xff08;归档日志&#xff09; 我们先来看redo log&#xff1a; 介绍一个MySQL里经常说到的WAL技术&#xff0c;即Write-Ahead-Logging&#xff0c;它的关键点…

2023春季李宏毅机器学习笔记 03 :机器如何生成文句

资料 课程主页&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub&#xff1a;https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程&#xff1a;https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、大语言模型的两种…

Linux基础知识点(五-信号)

一、信号的基本概念 1.1 信号的概念 信号&#xff08;signal&#xff09;&#xff0c;又称为软中断信号&#xff0c;用于通知进程发生了异步事件&#xff0c;它是Linux系统响应某些条件而产生的一个事件&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种异…

burpsuite模块介绍之extender(扩展)

extender Burp提供了对第三方拓展插件的支持,使用户能够编写自定义插件或从插件商店中安装拓展插件。这些Burp扩展程序可以以多种方式定制Burp的行为,包括修改HTTP请求和响应、自定义UI、添加自定义扫描程序检查以及访问关键的运行时信息,如代理历史记录、目标站点地图和扫…