Numpy详解,带你一步步了解Numpy(一)_西伯利亚的长颈鹿的博客-程序员宅基地

技术标签: python  机器学习  numpy  Numpy  

目录

一、介绍

二、主要内容

1、数据的类型

2、从列表创建数组

 3、Numpy数组的基础

 4、数组切片:访问子数组

 5、 多维数组

 6、子数组作为不可复制视图

 7、创建数组的副本

 8、重塑数组大小

 9、串联数组

 10、数组的分割

 11、循环效率问题


一、介绍

1、Numpy是python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix)),支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

2、在实际运用的第一步,不管数据是什么类型的,首先将其转化为数字数组才可以进行分析

二、主要内容

1、数据的类型

(1)在python中,数据类型是动态推断的,类型的灵活性表明,python变量不仅仅是包含它们的值,而且还包含了关于这个值类型的额外信息例如。

x=1
x='one'

 简单的两变量中,同时包含着他的参考数量,类型,以及大小等信息

L=[True,'2',3.0,4]
[type(item)for item in L]

 

列表的优点是灵活性:因为每个列表元素都是包含数据和类型信息....的完整结构

但是,如果列表中的所有变量都是相同类型的,那么很多额外的信息都是多余的。

 

固定类型numpy样式的数组缺乏列表的灵活性,但在存储和操作数据方面要高效得多。

Numpy不仅提供了基于数组的数据结构的高效存储,而且还提供了对该数据的高效操作。

2、从列表创建数组

 如果数组中的元素类型不匹配,Numpy将尽可能向上转换。

 

使用关键字" dtype "显式设置结果数组的数据类型

 

 创建一个包含三个整数的未初始化数组(值将是该内存位置上已经存在的任何值)。

 随机创建

 3、Numpy数组的基础

Numpy数组有固定的类型。因此,如果您试图将一个浮点值插入到一个整型数组中,该值将被静默地截断。

 4、数组切片:访问子数组

 

 5、 多维数组

多维数组切片方式与一维类似,先切行,后切行里面的元素

 6、子数组作为不可复制视图

Python list切片返回原始列表数据的副本。

Numpy数组片返回原始数组数据的视图。

 可见,当切片后的数组发生改变,原先的数组也会发生对应的变化

 7、创建数组的副本

所以,为了防止原数据被更改,我们需要使用数组的副本进行修改

发现,当使用了copy函数之后,原先数组的内容没有被改变

 8、重塑数组大小

 将一维数组转换为二维行或列矩阵可以使用重塑()方法完成,也可以在切片操作中使用关键字newaaxis。

 9、串联数组

在Numpy中,连接或连接两个数组主要通过以下例程完成:

  • np.concatenate ()
  • np.vstack ()
  • np.hstack ()

多维的合并

 重塑与新增维度组合运用

hstack()是横向拉伸
vstack()是纵向排列

 10、数组的分割

与拼接相反的是分割,它由以下函数实现:

  • np.split ()
  • np.vsplit ()
  • np.hsplit ()

 同样的,存在纵向分割和横向分割

 11、循环效率问题

Numpy数组上的计算可以非常快,也可以非常慢

所以在Numpy或者说十python的计算工程中,请尽量避免嵌套式的循环出现

 由于内容过多,将会在接下来的文章中再做介绍,本文章内容到此,后续会有更新。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_59160272/article/details/126577908

智能推荐

Linux查看进程运行输出(/proc/<pid>/fd)_/proc/pid/fd_Roc大鹏君的博客-程序员宅基地

Step1:查看进程id输入ps或ps -efroot@TinaLinux:/proc/631/fd# psPID USER TIME COMMAND 1 root 0:03 /sbin/procd........... 631 root 0:06 ./rt_agent 694 root 0:00 [kworker/2:2] 771 root 0:23 /home/upg/fupg要查看的进程id为631。St_/proc/pid/fd

充分利用 Xerces-C++,第 1 部分-程序员宅基地

充分利用 Xerces-C++,第 1 部分 2010年10月15日  这篇分为两个部分的文章对 Xerces-C++ XML 库作了介绍。第1部分解释如何将这个库链接到在 Linux 和 Windows 中编写的应用程序。大量的代码展示了用 SAX API 进行解析的情况,还有一个示例应用程序显示了如何以 ASCII 艺术的形式创建一个条形图。在第 2 部分,我将展示如何装载、操作或...

压缩解压命令(gzip、gunzip | tar | zip、unzip | bzip2、bunzip2)-程序员宅基地

压缩:gzip 与 解压:gunzipgzip:压缩命令语法:gzip [文件]压缩后文件格式: .gzgunzip:解压缩.gz的压缩文件语法:gunzip [压缩文件]注意:gzip:只能压缩文件,不保留源文件。压缩解压命令:tar语法:tar 选项 [-zcf] [压缩后的文件名] [目录] -c 打包 -v 显示详细信息 -f 指定文件命名..._解压命令

js报错:Invalid left-hand side in assignment-程序员宅基地

Uncaught ReferenceError: Invalid left-hand side in assignmen未捕获的引用错误:赋值中的左侧无效写完js后,页面在加载的时候,一直如上的错误,仔细检查发现js在做对比的时候,少写一个=;错误代码:if (nodes[i].nodeType == 1 && nodes[i].node..._javascript error: invalid left-hand side in assignment

'\0' 占用字节数_\0占几个字符_迷路君的博客-程序员宅基地

今天在论坛看到有人询问一下代码的输出#include void main(){ printf("%d" ,sizeof( '\0'));}我一看 '\0'不就是一个char么 ,输出 1 结果答案是4看到楼下有评论------------------------------------------------------------_\0占几个字符

echarts实现自定义扩展地图-中国七大区域图_echarts 区域地图-程序员宅基地

相信很少用echarts的人第一次接触时会有很多疑惑,比如,在百度突然看到一段代码,感觉莫名奇妙,不知道怎么用。正所谓熟能生巧,当你专一用echarts一个月后,你会发现其实任何技术并没有想象那么难。下面进入正题:第一步:下载echarts包,这里需要注意的是,网上现在有很多版本的,比如echarts-all.js,要实现自定义扩展地图这个就满足不了,需要用到比较早的那个地图版本,结构如下图:相信很多人看了就知道是哪个版本了还需要七大区的geoJSON数据包,后面我在下载那上传供大家下载_echarts 区域地图

随便推点

集群搭建必备:虚拟机之一实现Host-only方式上网_pcem如何上网-程序员宅基地

阅读本文可以带着下面几个小问:1、虚拟机实现上网的三种方式,其中网桥模式和主机模式本帖不予讨论,感兴趣的同志请前往。2、虚拟机host-only模式不是只能VM与主机通信吗,又怎么才能上网呢。Host-only模式实现联网得考虑如下配置过程:1、 安装VMware-Workstation,安装虚拟机Linux(centos、ubuntu等)完毕。2、设置虚拟机上网方式是_pcem如何上网

Java工作一年了,不会还不懂Java线程池的使用吧?(代码详解)_java开发不懂线程池-程序员宅基地

hello你好我是辰兮很高兴你能来阅读,本篇整理了线程池相关的代码案例,整理了好几天才实践完这篇文章,也希望自己对线程池有更深入的理解,欢迎阅读学习交流,分享获取新知,大家一起进步!文章目录1、Preface序言2、FixedThreadPool3、CachedThreadPool4、SingleThreadExecutor5、ScheduledThreadPool1、Preface序言线程(英语:thread)是操作系统能够进行运算调度的最小单位。线程池就是创建若干个可执行的线程放入一个池(._java开发不懂线程池

Android Studio 3.0 JNI 开发环境配置 ndk cmake编译-程序员宅基地

Android Studio 3.0 配置JNI环境走了很多弯路 这里记录一下,通过 javah + Android.mk + Application.mk 的方法行不通在AS 3.0之后,在根目录添加 gradle.properties:android.useDeprecatedNdk=true (作用支持旧版本的NDK)在3.0之后的版本不起作用。这里通过cmake一:开始配置1.新建一个...

springmvc的文件上传和下载_spring mvc 下载数据库数据-程序员宅基地

文章目录前言一、添加相关配置1、在pom.xml中添加文件上传相关依赖2、配置文件上传解析器(CommonsMultipartResolver),加在spring-mvc.xml配置文件中的最后(默认是叫springmvc-servlet.xml)二、相关代码1、参考的数据库表t_file2.实体类File.java3.DAO层FileMapper.java(这里上传主要用到了insert方法)4.DAO层映射文件FileMapper.xml5.service层接口IFileService.java6.se_spring mvc 下载数据库数据

Static 关键字_et0015: static字段声明 random 需要标记标签-程序员宅基地

前面的代码均使用一个类分别开辟栈内存和堆内存,在堆内存中保存对象中的属性,每个对象有自己的属性,使用 static 声明的属性可被所有对象共享,如果一个类中的方法想由类直接调用,则可以声明为 static 方法。一 、使用 static 声明属性class Person { String name; int age; static String countr..._et0015: static字段声明 random 需要标记标签

NOI/ 1.7编程基础之字符串(题库)-程序员宅基地

题目ID 标题 分数 尝试人数 01 统计数字字符个数 10 23655 02 找第一个只出现一次的字符 10 19481 03 基因相关性 10 15709 04 石头剪子布 10 14165 05 输出亲朋字符串 10 12807 06 合法 C 标识符 ...