python数列求和-加强版_不就是NumPy嘛,盘它! (上篇)

0

引言

Numpy 是 Python 专门处理高维数组 (high dimensional array) 的计算的包,每次使用它遇到问题都会它的官网 (www.numpy.org).去找答案。 在使用 numpy以前,须要引进它,语法以下:javascript

import numpy

这样你就能够用 numpy里面全部的内置方法 (build-in methods) 了,好比求和与均值。php

numpy.sum()numpy.mean()

可是每次写 numpy字数有点多,一般咱们给 numpy 起个别名 np,用如下语法,这样全部出现 numpy的地方均可以用 np 替代。css

import numpy as np

为何要专门学习数组呢?看下面「numpy数组」和「列表」之间的计算效率对比:两个大小都是 1000000,把每一个元素翻倍,运行 10 次用 %time 记时。html

my_arr = np.arange(1000000)my_list = list(range(1000000))

%time for _ in range(10): my_arr2 = my_arr * 2

Wall time: 48.9 ms

%time for _ in range(10): my_list2 = [x * 2 for x in my_list]

Wall time: 1.33 s

咱们发现「numpy数组」效率是「列表」效率的 27 (1.33*1000/48.9) 倍左右。若是元素全是数值型变量 (numerical variable),那么 numpy数组明显是个很好的数据结构。java

学习 numpy仍是遵循的 Python 里「万物皆对象」的原则,既然把数组当对象,咱们就按着数组的建立、数组的存载、数组的获取、数组的变形、和数组的计算来盘一盘 NumPy,目录以下:web

有些读者可能会说,NumPy 都什么好学的,数组都弄不懂的人还能干什么,那我来问你个问题,知道「转置操做」吧,那么下面这个二维数组转置后是什么?算法

arr = np.array([[1,2,3],[4,5,6]])arr

array([[1, 2, 3], [4, 5, 6]])

太简单了,是 [[1,4], [2,5], [3,6]],来看看是否是。shell

arr.T

array([[1, 4], [2, 5], [3, 6]])

答对了,你牛,再看一道转置的题

apache

arr = np.arange(16).reshape((2, 2, 4))arr

array([[[ 0, 1, 2, 3],

[ 4, 5, 6, 7]],

[[ 8, 9, 10, 11],

[12, 13, 14, 15]]])

等等,如今有三维,转置一般不是转两个维度吗?转三个维度也能够?固然,好比把第 1, 2, 3 维度转置到第 2, 1, 3 维度,能够用 transpose 函数。swift

arr.transpose(1,0,2)

array([[[ 0, 1, 2, 3],

[ 8, 9, 10, 11]],

[[ 4, 5, 6, 7],

[12, 13, 14, 15]]])

若是不知道上面答案怎么来的,我以为你仍是有必要看看本帖的。因为篇幅缘由,NumPy 系列也分两贴,上贴讲前三节的内容,下帖讲后两节的内容。

1

数组的建立

1.1

初次印象

数组 (array) 是相同类型的元素 (element) 的集合所组成数据结构 (data structure)。numpy 数组中的元素用的最可能是「数值型」元素,平时咱们说的一维、二维、三维数组长下面这个样子 (对应着线、面、体)。四维数组很难被可视化。

注意一个关键字 axis,中文叫「轴」,一个数组是多少维度就有多少根轴。因为 Python 计数都是从 0 开始的,那么

第 1 维度 = axis 0

第 2 维度 = axis 1

第 3 维度 = axis 2

但这些数组只可能在平面上打印出来,那么它们 (高于二维的数组) 的表现形式稍微有些不一样。

分析上图各个数组的在不一样维度上的元素:

一维数组:轴 0 有 3 个元素

二维数组:轴 0 有 2 个元素,轴 1 有 3 个元素

三维数组:轴 0 有 2 个元素 (2 块),轴 1 有 2 个元素,轴 2 有 3 个元素

四维数组:轴 0 有 2 个元素 (2 块),轴 1 有 2 个元素 (2 块),轴 2 有 2 个元素,轴 3 有 3 个元素

2.1

建立数组

带着上面这个对轴的认识,接下来咱们用代码来建立 numpy数组,有三种方式:

按步就班的 np.array() 用在列表和元组上

定隔定点的 np.arange() 和 np.linspace()

一步登天的 np.ones(), np.zeros(), np.eye() 和 np.random.random()

按步就班法

给了「列表」和「元组」原材料,用 np.array() 包装一下便获得 numpy数组。

l = [3.5, 5, 2, 8, 4.2]np.array(l)

array([3.5, 5. , 2. , 8. , 4.2])

t = (3.5, 5, 2, 8, 4.2)np.array(t)

array([3.5, 5. , 2. , 8. , 4.2])

注意,numpy数组的输出都带有 array() 的字样,里面的元素用「中括号 []」框住。

定隔定点法

更常见的两种建立 numpy数组方法:

定隔的 arange:固定元素大小间隔

定点的 linspace:固定元素个数

先看 arange例子:

print( np.arange(8) )print( np.arange(2,8) )print( np.arange(2,8,2))

[0 1 2 3 4 5 6 7]

[2 3 4 5 6 7]

[2 4 6]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值