ndarray数据类型

Ndarray的基本数据类型如下图所示,数据类型的命名采用“类型名+数字”的形式表示,数字表示数据的比特位长。在计算机中比特位bit是表示数据最小的单位,1个字节Byte的长度等于8个比特位,即1Byte = 8bit。int64表示8个字节长度的整型,float64表示为8个字节长度的双精度浮点型。同样类型的元素在内存中或磁盘中占的空间是一样的,因此在处理海量数据时,如果数据类型设置不合理,会导致内存或磁盘存储空间的浪费,并影响计算效率。但对于初学者而言,暂时不需要关注每种类型的长度,只需要知道ndarray中有整数型、浮点型、字符串型、布尔型、对象型。

Ndarray数据类型转换

ndarray与Python列表的最大的不同就是列表可以存入不同数据类型的元素,而ndarray要求所有元素的数据类型必须一致。Numpy会自动识别ndarray中的数据类型,如果数据类型不一致Numpy会将所有元素自动转换成一个合适的数据类型。

上图中先后创建了3个ndarray对象,arr1由3个整数组成,arr2将arr1中的第2个元素由整数型改为浮点型,为保证同一种数据类型,Numpy会将arr2中其它元素都转换成浮点型,arr3将arr2中的第3个元素改为字符串类型,同样Numpy会自动将其它元素转换成字符串型。整数型-->浮点型-->字符串型可以自动转换,如果把顺序颠倒过来不能自动转换,因为可能会造成数据的损失,我们可以使用astype( )函数手动强制转换。astype( )函数的原理是首先将原数组在内存中进行复制,数据类型转换的操作是在复制的数组里进行,不会对原数组造成影响。

注意上图中将arr4由浮点型转换成整数型时,每个元素的小数位都被自动截掉,实际应用中可能影响数据质量;只有当所有字符串元素都表示整数型或浮点型时,才能使用astype( )函数将字符转型转换成整数型或浮点型,否则会报ValueError错误;直接把arr6转换成整数型也会报错。

ndarray元素访问

ndarray可以用索引来访问元素,一维数组的索引访问方式与Python的list相同,多维数组只需要在索引中增加位置即可。下图中倒数第2行arr9[2]表示一维数组arr9中的第3个元素“15”,最后一行arr10[1,1]表示二维数组arr10的第2行第2个元素“25”。

同样ndarray可以使用切片访问多个元素。下图中第2行生成了0-9的整数组成的一维数组arr11,第4行进行切片操作,将数组第6-9个元素取出赋值给变量arr_slice;注意:切片是数组的视图,任何对切片的修改都会导致原数组的元素变化,第6行将切片第1个元素的值改为“0”,原数组arr11也随之发生了变化。如果你不想使用视图而只是对数组切片进行复制,需要使用copy( )函数。

切片中使用m:n的形式,表示[m, n)的半开半闭的范围。m,n分别表示切片的开始位置和结束位置,m若省略表示从第一个元素开始,n若省略表示到最后一个元素结束,m,n都省略表示取得该维度所有元素。熟练掌握切片对学习numpy很有必要,请读者参照下图分析切片的原理:

一维数组可以看做是个列表,二维数组可以看成是一个矩阵,可是对于多维数组,不少初学者可能会觉得不容易理解,特别是在进行切片操作时更是如此。下图用10以内的随机自然数填充了一个三维数组arr12,从打印的结果可以观察到,三维数组实际上由2个二维数组组成,arr12[0]表示第1个二维数组,arr12[0, 1]表示第1个二维数组的第2行,arr12[0, 1, 2]表示第1个二维数组第2行的第3个元素。

对多维数组的切片也跟二维数组是类似的,请读者自行分析下列几个表达式的切片结果:

ndarray数据类型及转换的更多相关文章

  1. java中数据类型的转换

    数据类型的转换,分为自动转换和强制转换. 自动转换是程序执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换 强制转换必须在代码中声明,转换顺序不受限制 自动数据类 ...

  2. Java的基本数据类型与转换

    1.1 Java为什么需要保留基本数据类型 http://www.importnew.com/11915.html 基本数据类型对大多数业务相关或网络应用程序没有太大的用处,这些应用一般是采用客户端/ ...

  3. java的数据类型的转换

    一:java的数据类型转换除布尔类型boolean(不能转换)有两种:<一> 自动转换: <二> 强制转换 <一>.自动转换:就是将小的数据类型自动转换成大的数据类 ...

  4. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  5. JAVA数据类型自动转换,与强制转换

    一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; dou ...

  6. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  7. 语言基础:C#输入输出与数据类型及其转换

    今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...

  8. C#基础(八)——C#数据类型的转换

    C#数据类型的转换主要有以下几种方式: 1.强制转换 注意:char类型不能强制转换成int,如果使用强制转化,得到的是原整数的ASCII码值. 2.class.parse(string类型的变量), ...

  9. php之数据类型自动转换

    1:概述 ---php是一种弱类型的语言,它可以根据运行环境的变化而自动进行数据类型的转换 1.1转换成布尔类型的原则 以下值都将转换成布尔类型中的false: A.布尔类型的false; B.空字符 ...

随机推荐

  1. asp.net 的 web form 过时了吗

    本文链接:https://blog.csdn.net/closurer/article/details/79526006web form 其实是一个超前的设计. 每个厂商都希望服务器端和客户端采用同样 ...

  2. 2.10 webdriver中 js 使用

    来源: 使用Webdriver执行JS小结  http://lijingshou.iteye.com/blog/2018929 selenium常用的js总结  http://www.cnblogs. ...

  3. NOIP做题练习(day1)

    A - Xenny and Alternating Tasks 题面 题解 枚举第一天是谁做,将两个答案取\(min\)即可. 代码 #include <iostream> #includ ...

  4. 如和针对CPU时间百分比,Mem使用bytes,以及Network RecvBytes/SendBytes指标性能压测数据可视化

    设计思路:通过jmeter5.1压测获取cpu,Mem,Network的压测指标数据利用pandas+openpyxl进行数据可视化: 涉及添加jar包:下载地址:https://files.cnbl ...

  5. hdu 1532 Drainage Ditches(网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目大意是:农夫约翰要把多个小池塘的水通过池塘间连接的水渠排出去,从池塘1到池塘M最多可以排多少 ...

  6. AVR单片机教程——DAC

    本文隶属于AVR单片机教程系列.   单片机的应用场景时常涉及到模拟信号.我们已经会使用ADC把模拟信号转换成数字信号,本讲中我们要学习使用DAC把数字信号转换成模拟信号.我们还将搭建一个简单的功率放 ...

  7. Bugku-CTF分析篇-weblogic(黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名。)

    weblogic 黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名. flag格式:flag{} Tip:主机名为十六进制.  

  8. mybatis重新回顾

    此次在项目中相遇了mybatis,重新回顾下. 1.resulMap解决了结果集的列名字跟实体setter和getter不匹配的问题 其中property是实体的setter和getter对象,col ...

  9. 2019冬季PAT甲级第四题

    #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; typedef struct node{ ...

  10. Good Bye 2019E(点坐标缩小一半以区分奇偶性)

    设某个点的坐标为(x,y),根据坐标奇偶性公可分为四类,0表示偶数,1表示奇数,(0,0),(0,1),(1,0),(1,1). 如果所有点的坐标都属于一类,那么它们之间的距离都是4的倍数,无法分辨. ...