前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用NumPy、Numba的简单使用(一)

使用NumPy、Numba的简单使用(一)

作者头像
小菜的不能再菜
修改2019-10-09 09:19:34
9170
修改2019-10-09 09:19:34
举报
文章被收录于专栏:java_pythonjava_python

Numpy是python的一个三方库,主要是用于计算的,数组的算数和逻辑运算。与线性代数有关的操作。

很多情况下,我们可以与SciPy和 Matplotlib(绘图库)一起使用。来替代MatLab,下面我来来看一下numpy库的常见的一些操作。

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

if __name__ == '__main__':
    print(np.array([1, 2, 3]))

我们可以看到我们的输出为[1,2,3],类型为<class 'numpy.ndarray'>,我们可以将一个列表转化为数组。这里我也列出了一些最基本的用法

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

if __name__ == '__main__':
    a = np.array(['1', '2', '3'])
    print(a.size)  # 数组的长度
    print(a.shape)  # 数组的结构
    print(a.ndim)  # 数组的维度
    print(a.dtype)  # 内部元素类型

创建10行10列的数值为浮点1的矩阵

array_one = np.ones([10, 10])

快创建10行10列的数值为浮点0的矩阵

代码语言:javascript
复制
array_zero = np.zeros([10, 10])

从现有的数据创建数组

  • array(深拷贝)
  • asarray(浅拷贝)
代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

if __name__ == '__main__':
    a = array_one = np.ones([10, 10])
    b = np.asarray(a)
    print(id(a))
    print(id(b))
    c = np.array(b)
    print(id(c))

说完了这些,我们应该对于numpy有了初步的认识,我们到这里知道了numpy.....原来是生成一个多维数组的玩意

我们再来深入的看一下numpy的内部信息吧。

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组。

ndarray 中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数

这里我们提到的了跨度,跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。注意这里是字节数,不是字符数。

创建一个 ndarray 只需调用 NumPy 的 array 函数即可,这里我们要说一个重要的属性,也是容易误解的属性->ndim,秩,即轴的数量或维度的数量,我们只记住他是维度的数量就ok了。

索引:

代码语言:javascript
复制
import numpy as np

if __name__ == '__main__':
    a = np.arange(10)
    print(a)
    s = slice(2, 8, 2)  # 从索引 2 开始到索引 8 停止,间隔为2,是一个左闭右开区间
    print(a[s])

切片:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

if __name__ == '__main__':
    a = np.arange(10)
    print(a)
    print(a[2:8:2]) # 从索引 2 开始到索引 8 停止,间隔为 2,不包含8的一个左闭右开区间

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

代码语言:javascript
复制
a[...,n]) # 第n+1列元素
代码语言:javascript
复制
a[n,...]) # 第n+1行元素
代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np

if __name__ == '__main__':
    a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
    print(a)
    print(a[..., 2])
    print(a[1, ...])

高级索引:

  NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
x = np.array([[1,  2],  [3,  4],  [5,  6]])
y = x[[0,1,2],  [0,1,0]]
print(x)
print (y)

在y的输出我们可以看到,我们对于X切片得到的y,其实[0,1,2],[0,1,0]两个数组,我们得到的是第0,0;1,1;2,0三个数据。

  布尔索引:

代码语言:javascript
复制
import numpy as np

x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
print('我们的数组是:')
print(x)
print('\n')
# 现在我们会打印出大于 5 的元素
print('大于 5 的元素是:')
print(x[x > 5])

我们得到的是所有大于5的元素。

最近搞了一个个人公众号,会每天更新一篇原创博文,java,python,自然语言处理相关的知识有兴趣的小伙伴可以关注一下。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档