numpy基础(一)

numpy 基础简介

numpy 操作的主要对象是同类型的多维数组。它是一张表,通常它的元素都是数字。并通过正整数元素索引。在 numpy 中维度称为轴,轴的数目称为 rank 。

numpy的数组类被称为ndarray。别名 array 。numpy.array 与标准Python库类 array.array 不同,后者仅处理一维数组并提供较少的功能。 ndarray 对象则提供更关键的属性:

  • ndarray.ndim :数组的轴(维度)的个数。
In [1]: import numpy as np
In [17]: a = np.array([1,2,3,4,5])

In [18]: a
Out[18]: array([1, 2, 3, 4, 5])

In [19]: a.ndim
Out[19]: 1
In [9]: a = np.array([[1,2,3,4],[5,6,7,8]])

In [10]: a
Out[10]:
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

In [11]: a.ndim
Out[11]: 2

In [12]: a = np.array([[1,2,3,4],[5,6,7,8],[12,13,14,15]])

In [13]: a
Out[13]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [12, 13, 14, 15]])

In [14]: a.ndim
Out[14]: 2


  • ndarray.shape :数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有n行和m列的矩阵,shape将是(n,m)。因此,shape元组的长度就是rank或维度的个数 ndim。
In [17]: a
Out[17]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [12, 13, 14, 15]])

In [18]: a.shape
Out[18]: (3, 4)

In [19]:
  • ndarray.size:数组元素的总数。这等于shape的元素的乘积。
In [19]: a
Out[19]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [12, 13, 14, 15]])

In [20]: a.size
Out[20]: 12

In [21]:

  • ndarray.dtype:一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
In [24]: a
Out[24]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [12, 13, 14, 15]])

In [25]: a.dtype
Out[25]: dtype('int32')

In [26]:

  • ndarray.itemsize:数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。
In [24]: a
Out[24]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [12, 13, 14, 15]])

In [25]: a.dtype
Out[25]: dtype('int32')

In [26]: a.itemsize
Out[26]: 4

In [27]: a.dtype.itemsize
Out[27]: 4

数组的创建

可以使用 array 函数从常规的python列表或元组中创建数组。得到的数组类型是从python列表中的元素推导出来的。
上面的例子大都是从常规的python列表创建的:


In [39]: a = np.array((1,2,3))

In [40]: a
Out[40]: array([1, 2, 3])

In [41]: a = np.array(((1,2,3),(4,5,6)))

In [42]: a
Out[42]:
array([[1, 2, 3],
       [4, 5, 6]])

结合起来也是可以的:

In [43]: a = np.array([(1,2,3),(4,5,6)])

In [44]: a
Out[44]:
array([[1, 2, 3],
       [4, 5, 6]])

数组的类型也是可以在创建的时候就指定:


In [2]: a = np.array([[1,2,3],[4,5,6]],dtype=complex)

In [3]: a
Out[3]:
array([[1.+0.j, 2.+0.j, 3.+0.j],
       [4.+0.j, 5.+0.j, 6.+0.j]])

complex 是复数的意思。

通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy提供了几个函数来创建具有初始占位符内容的数组。这就减少了数组增长的必要,因为数组增长的操作花费很大。

  • 函数 zeros 创建一个由 0 组成的数组:
In [4]: a = np.zeros((3,4))

In [5]: a
Out[5]:
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
  • 函数 ones 创建一个由 1 组成的数组:
In [6]: a = np.ones((3,4))

In [7]: a
Out[7]:
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
  • 函数 empty 内容是随机的并且取决于存储器的状态。默认情况下,创建的数组的dtype是 float64。
In [15]: a
Out[15]:
array([[1.69122046e-306, 1.31996133e-285, 1.32001905e-285],
       [2.22129839e-285, 1.32003829e-285, 1.31963425e-285],
       [1.25972084e-285, 0.00000000e+000, 0.00000000e+000]])

In [16]: a.dtype
Out[16]: dtype('float64')
  • 创建数字序列,NumPy提供了一个类似于 range 的函数,该函数返回数组而不是列表。
In [21]: np.arange(0,2,0.2)
Out[21]: array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8])

In [22]: np.arange(1,5,2)
Out[22]: array([1, 3])

打印数组

当你打印数组时,NumPy以与嵌套列表类似的方式显示它,但是具有以下布局:

  • 最后一个轴从左到右打印,
  • 倒数第二个从上到下打印,
  • 其余的也从上到下打印,每个切片与下一个用空行分开。

一维数组被打印为行、二维为矩阵和三维为矩阵列表。


In [24]: a
Out[24]: array([1, 3])

In [25]: print(a)
[1 3]

In [26]: a = np.array(([1,2,3],[4,5,6]))

In [27]: print(a)
[[1 2 3]
 [4 5 6]]

In [28]: c = np.arange(24).reshape(2,3,4)

In [29]: print(c)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

基本操作

数组上的算术运算符使用元素级别。加减乘除都是每个元素之间的运算。

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])
  • 一些函数
In [36]: a
Out[36]:
array([[1, 2, 3],
       [4, 5, 6]])

In [37]: a.max()
Out[37]: 6

In [38]: a.min()
Out[38]: 1

In [39]: a.sum()
Out[39]: 21
  • 默认情况下,这些操作适用于数组,就好像它是数字列表一样,无论其形状如何。但是,通过指定 axis 参数,你可以沿着数组的指定轴应用操作:
In [4]: np.arange(12).reshape(3,4)
Out[4]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [5]: a = np.arange(12).reshape(3,4)

In [6]: a.min(axis=0)
Out[6]: array([0, 1, 2, 3])

In [7]: a.min(axis=1)
Out[7]: array([0, 4, 8])

通用函数

NumPy提供了常见的数学函数,如sin,cos和exp。在NumPy中,这些函数在数组上按元素级别操作,产生一个数组作为输出。

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

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,124评论 0 18
  • 来源:NumPy Tutorial - TutorialsPoint 译者:飞龙 协议:CC BY-NC-SA 4...
    布客飞龙阅读 32,788评论 6 96
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,577评论 1 13
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,228评论 0 5
  • 今天参加了永毅的家长会,与老师沟通感觉孩子期中考试成绩明显进步,平时跟同学之间相处还是比较友好,善良诚实的,同时也...
    顾国胜阅读 125评论 0 0