Numpy库的学习(一)

今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库

Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好

是大量机器学习框架的基础库

废话不多说,直接开整

Numpy中最核心的结构就是ndarray数组

Numpy中定义的最重要的对象是成为ndarray的N维数组类型

它描述相同类型的元素集合。可以使用基于零的索引访问集合中的项目。大部分的数组操作仅仅是修改元数据部分,而不改变其底层的实际数据。

数组的维数称为秩,简单来说就是如果你需要获取数组中一个特定元素所需的坐标数

如a是一个2×3×4的矩阵,你索引其中的一个元素必须给定三个坐标a[x,y,z],故它的维数就是3。

数组中所有元素的类型必须是一致的,Python支持的数据类型有整型、浮点型以及复数型

但这些类型不足以满足科学计算的需求,因此NumPy中添加了许多其他的数据类型

如bool、inti、int64、float32、complex64等。同时,它也有许多其特有的属性和方法。

import numpy as np
vector = np.array([5,10,15,20])
matrix = np.array([[5,10,15],[20,25,30],[30,35,40]])print (vector)print (matrix)

我们可以就看到,这里我写了一个行向向量,和一个矩阵向量

可以得到如上图所示的结果,打印出一个行向量,和一个3行3列的矩阵向量

ndarray中有很多个可以调用的属性,我们可以做一些分析等等操作

首先讲一下shape属性

vector = np.array([1,2,3,4])
print(vector.shape)
matrix = np.array([[5,10,15],[20,25,30],[30,35,40]])
print (matrix.shape)

可以看到,运行上面的代码我们得到这样一个结果

shape就是说,我要看一下这个向量的维度是多少

第一个向量,vector是一个行向量,所以说打印出来只有当前的向量中的元素个数4

对于第二行结果来说, 他是一个3X3的矩阵向量,(3,3)表示我们当前打印的数据

是一个3行3列的矩阵向量

接下来看看这个例子

number = np.array([1,2,3,4])
print(number)
number.dtype

可以看到,运行上面的代码,我们可以得到一个dtype类型值

这个值是表示我们的dtype的格式为int32,下面我们来做一些变化

number = np.array([1,2,3,4.0])
print(number)
number.dtype

我们可以看到,这里numpy帮我们自动转换了数据格式

讲所有的整数类型,全部都换成了浮点型

dtype也变成了float64类型,我们在做些变化

number = np.array([1,2,3,‘4‘])
print(number)
number.dtype

我们把4修改为字符串类型

得到的结果,数据全都变成字符串类型了,数据类型也变了

也就是说,在numpy的ndarray中,必须传进来的数据类型,都是同一种结构的

我们现在来讲下如何使用numpy来读取文件数据

我们这里有些测试数据,名为1.txt文件

TestTxt = np.genfromtxt(‘1.txt‘,delimiter=".", dtype=str ,skip_header=1)
print(TestTxt)

这段代码的意思是,是用numpy中的genfromtxt方法读取文件

参数为,1.txt文件名称,delimiter 以什么进行分割这里用 . 点号进行分割

dtype =str 指定当前的数据类型为字符串

skip_header=1 ,指定去掉第一行数据

得到如下结果

得到了文件中的内容,转换成了矩阵,读出来的数据都是一种矩阵数据格式

当然这个文件读取方式不会经常用到,后面讲另外一个更好用的,pands库中的

这里就不多讲numpy中的文件读取

如果我想取出上面矩阵中的某个值,怎么操作呢?

比如我们想取出第三行的第一个数据

第四行的第二个数据

out = TestTxt[2,0]
out1 = TestTxt[3,1]
print(out)
print(out1)

运行上诉代码

可以看到,在numpy中,index下标是从0开始的,而不是1

所以一定要切记

我们在定义一个向量

vector = np.array([5,10,15,20,25])
print(vector[0:3])

我想打印向量中的前三个值

可以看到,这里的操作和python中的切片操作一样

选取0到3,包括0但是不包括3

那么对于矩阵来说也是一样的

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

我想打印当前矩阵所有样本的第二列

matrix[:,1]

那么这里用逗号隔开,第个表示行,第二个表示列,表示取所有行的第二列

用:进行站位

我想取所有行的前两列怎么取呢?

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

这里可以看到,取全部行,的0号,和1号列,2号不包含

得到结果,也很简单

那么我如何取某几行,某几列呢?方法也是一样的

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

取第2,3行的,1,2列

那么可以得到

好的,今天的numpy库就讲到这里。下次我们继续说。感觉阅读欢迎点赞转发。谢谢各位!

原文地址:https://www.cnblogs.com/ws17345067708/p/10687078.html

时间: 2024-10-29 00:07:11

Numpy库的学习(一)的相关文章

Numpy库的学习(五)

今天继续学习一下Numpy库,废话不多说,整起走 先说下Numpy中,经常会犯错的地方,就是数据的复制 这个问题不仅仅是在numpy中有,其他地方也同样会出现 import numpy as np a = np.arange(12) b = a print(b is a) b.shape = 3,4 print(a.shape) print(id(a)) print(id(b)) 先看看这段代码,我们随便建立了一个numpy数组 然后我想把a这个值,赋值给b,很简单的操作,b = a 那么我们打

pyhton numpy库的学习

1.Numpy核心数据结构:ndarray ndarray是由同一种类型的元素组成的N维数组 1.1 ndarray的创建 主要有以下几个函数进行创建: array() zeros():全零数组 ones():全1数组 empty():创建未初始化的数组 1.1.1通过array()创建 (1)一维 a = np.array([1,2,3,4]) (2)二维 b = np.array([     [1,2,3,4],     [5,6,7,8]]) (3)三维 c = np.array([ [

数据分析与展示——NumPy库入门

这是我学习北京理工大学嵩天老师的<Python数据分析与展示>课程的笔记.嵩老师的课程重点突出.层次分明,在这里特别感谢嵩老师的精彩讲解. NumPy库入门 数据的维度 维度是一组数据的组织形式.数据维度就是在数据之间形成特定关系表达多种含义的一个概念. 一维数据: 一维数据由对等关系的有序或无序数据构成,采用线性方式组织.对应列表.数组和集合等概念. 列表和数组:一组数据的有序结构. 区别: 列表:数据类型可以不同 数组:数据类型相同 二维数据: 二维数据由多个一维数据构成,是一维数据的组合

&lt;class &#39;numpy.ndarray&#39;&gt;的学习

在学习opencv-python的时候,给出图片地址再调用cv2.imread("地址"),发现出创建的是numpy类型的ndarray对象,用来存放多维数组的对象 # 导入cv2模块 import cv2 # 给出本地图片的地址 img_dir="D:/360Downloads/test.jpg" # 创建numpy类型的ndarray对象,存放多维数组的对象 img=cv2.imread(img_dir) # <class 'numpy.ndarray'&

数据分析之Numpy库入门

1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列表:数据类型可以不同,如:[3.1413,'pi',3.1404,[3.1402,2.34],'3.2376'] 数组:数据类型相同 .如[3.14,34.34,3433.3,343.23] 二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据! 注意:表格的表头,可以是

标准模板库(STL)学习探究之vector容器

标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类

gdal库的学习和使用

1.windows下的编译 1.1.解压后打开nmake.opt,设置GDAL_HOME 1.2.进入vs的command promot,进入正常的那个即可,64位的没试过,可以参考gdal官网 1.3.nmake /f makefile.vc 1.4.nmake /f makefile.vc install 1.5.nmake /f makefile.vc devinstall 2.打开文件 #include "gdal_priv.h" #include "cpl_conv

C++的开源跨平台日志库glog学习研究(一)

作为C++领域中为数不多的好用.高效的.跨平台的日志工具,Google的开源日志库glog也算是凤毛麟角了.glog 是一个C++实现的应用级日志记录框架,提供了C++风格的流操作. 恰巧趁着五一我也学习研究了这个glog库,写个总结如下.走过路过的的各位牛人.高手可以忽略这篇文章了. 从code.google.com下载源码(在这里),在Visual Studio 2010中打开工程,如下: 可见只有四个工程,其中libglog和libglog_static分别是Windows下的动态库和静态

C++的开源跨平台日志库glog学习研究(二)--宏的使用

上一篇从整个工程上简单分析了glog,请看C++的开源跨平台日志库glog学习研究(一),这一篇对glog的实现代码入手,比如在其源码中以宏的使用最为广泛,接下来就先对各种宏的使用做一简单分析. 1. 日志输出宏 这里我们以一条最简单的日至输出为例说明: LOG(WARNING) << "This is a warning message"; 这里LOG是一个宏,其定义如下(logging.h line 487): #define LOG(severity) COMPACT