zoukankan      html  css  js  c++  java
  • ndarray数据类型及转换

    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个元素。

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

  • 相关阅读:
    LeetCode 43. 字符串相乘(Multiply Strings)
    LeetCode 541. 反转字符串 II(Reverse String II)
    枚举类型
    c#字母加密
    汇率兑换Python
    冒泡排序c#
    c#
    HTML
    日历
    Java2
  • 原文地址:https://www.cnblogs.com/liuys635/p/11201827.html
Copyright © 2011-2022 走看看