Python——ndarray多维数组对象介绍

1.Numpy库介绍:

Numpy是Numercial Python的简称,是一个开源的Python科学计算基础库。

  • 提供一个强大的N维数组对象ndarray,并提供了基于数组的算术操作及广播功能函数;
  • 整合C/C++/Fortran代码工具;
  • 线性代数、傅里叶变换、随机数生成等功能。

Numpy是Scipy、Pandas等数据处理或科学计算库的基础。
Numpy的引用直接使用以下语句即可:

import numpy as np # 尽管别名可以省略或者修改,建议使用上述约定的别名

2.多维数组对象ndarray的设置原因:

Python中可以利用列表表示数组,那Numpy为什么还要设置ndarray那?
例如,计算A²+B²,其中A和B是一维数组。
在python语法中,需要利用循环结构,计算数组中的每个数据。

def pysum():
    a = [0,1,2,3,4]
    b = [9,8,7,6,5]
    c = []
    
    for i in range(len(a)):
        c.append(a[i]**2 + b[i]**3)
    return c
print(pysum())

而NUmpy则把一个一维数据作为单个数据,直接进行计算。

import numpy as np

def npsum():
    a = np.array([0,1,2,3,4])
    b = np.array([9,8,7,6,5])
    c = a**2 + b**3
    return c 
print(npsum())

从上面例子中可以看出,N维数组对象ndarray:

  • 数组对象可以去掉元素见运算所需的循环,使一维向量更像单个数据。
  • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度(numpy底层是由C语言编写,计算速度更快)。
  • 数组对象采用相同的数据类型,有助于节省运算和存储空间(因为在科学计算中,一个维度所有数据的类型往往是相同的)。

3.多维数组对象ndarray:

ndarray是Python中一个快速、灵活的大型数据集容器,作为一个多维数组对象,由两部分构成:

  • 实际的数据;
  • 描述这些数据的元数据(数据维度、数据类型等):
    ndarray数组一般要求所有要素类型相同(同质),数组下标从0开始(但也有特殊情况)。
    轴(axis):保存数据的维度。
    秩(rank):轴的数量。

4.生成ndarray:

生成数组最简单的方法就是使用array函数,array函数接收任意的序列型对象,生成一个Numpy数组。

# 当np.array()不指定dtype时,numpy将根据数据情况关联一个dtype类型
x = np.array(list/tuple)
x = np.array(list/tuple,dtype=np.float32)

数组生成函数列表:

函数 说明
np.array() ----
np.asarray() 将输入转换为ndarray,但是如果输入已经是ndarray则不再复制
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元祖类型
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros(shape) 根据shape生成一个全0数组,shape是元祖类型
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.empty(shape) 根据shape生成一个没有初始化数值的空数组,shape是元祖类型
np.empty_like(a) 根据数组a的形状生成一个没有初始化数值的空数组
np.full(shape,val) 根据shape生成一个数组,每个元素都是val
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val
np.eye(n) 创建一个正方的n×n单位矩阵,对角线为1,其余为0
np.linspace() 根据起始数据等间距地填充数据,形成数组

5.ndarray对象的属性:

通过下述函数可以查看数组的相应属性信息。

属性 说明
.ndim 秩,即轴的数量或维度的数量
.shape ndarray对象尺度,对于矩阵,n行m列
.size ndarray对象元素的个数,相当于.shape中n×m的值
.dtype ndarray对象的元素类型
.astype 转换ndarray对象的数据类型
.itemsize ndarray对象中每个元素的大小,以字节为单位
import numpy as np

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

a.ndim
Out[3]: 2

a.shape
Out[4]: (2, 5)

a.size
Out[5]: 10

a.dtype
Out[6]: dtype('int32')

a.itemsize
Out[7]: 4

6.ndarray对象的数据类型:

从上面实例中看到a.dtype返回的类型是int32,这个类型在基础的python语法中并不存在,它是numpy定义的元素类型,除此之外,numpy还有很多其他元素类型:

数据类型 说明
bool 布尔类型,True或False
intc 与C语言中的int类型一致,一般是int32或int64
intp 用于索引的整数,与C语言中ssize_t一致,int32或int64
int8 字节长度的整数,取值:[-128,127]
int16 16位长度的整数,取值:[-32768,32767]
int32 32位长度的整数,取值:[-231,231-1]
int64 64位长度的整数,取值:[-263,263-1]

还有一类元素类型,没有负数部分,称为无符号整数:

数据类型 说明
uint8 8位无符号整数,取值:[0,255]
uint16 16位无符号整数,取值:[0,65535]
uint32 32位无符号整数,取值:[0,2^32-1]
uint64 64位无符号整数,取值:[0,2^64-1]
float16 16位半精度浮点数:1位符号位,5位指数,10位尾数
float32 32位半精度浮点数:1位符号位,8位指数,23位尾数
float64 64位半精度浮点数:1位符号位,11位指数,52位尾数

ndarray还支持两种复数类型:

数据类型 说明
complex64 复数类型,实部和虚部都是32位浮点数
complex128 复数类型,实部和虚部都是64位浮点数

相比python语法仅支持整数、浮点数和复数3种类型,那ndarray为什么要支持这么多的元素类型那?

  • 科学计算涉及数据较多,对存储和性能都有较高要求;
  • 对元素类型精细定义,有助于Numpy合理使用存储空间并优化性能;
  • 对元素类型精细定义,有助于程序员对程序规模有合理评估。

Reference:
《Python for Data Analysis:Data Wrangling with Pandas,Numpy,and IPython》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容