请选择 进入手机版 | 继续访问电脑版
楼主: jpld
4262 5

[原创博文] 【NumPy学习指南】day1 NumPy在数组操作上优势 [推广有奖]

  • 2关注
  • 50粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
1268 个
通用积分
2.1233
学术水平
120 点
热心指数
120 点
信用等级
99 点
经验
1249 点
帖子
192
精华
0
在线时间
271 小时
注册时间
2009-5-29
最后登录
2022-3-1

jpld 发表于 2015-10-23 21:56:40 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

NumPy数组在数值运算方面的效率优于Python提供的list容器。使用NumPy可以在代码中省去很多循环语句,因此其代码比等价的Python代码更为简洁。

实践:向量加法

假设我们需要对两个向量a和b做加法。

以下的纯Python代码可以解决上述问题:

def pythonsum(n):
   a = range(n)
   b = range(n)
   c = []

   for i in range(len(a)):
       a = i ** 2
       b = i ** 3
       c.append(a + b)

   return c

以下是使用NumPy的代码,它同样能够解决问题:

def numpysum(n):
   a = np.arange(n) **
2
   
b = np.arange(n) ** 3
   
c = a + b

   
return c

numpysum()函数中没有使用for循环。同时,我们使用NumPy中的arange函数来创建包含0~n的整数的NumPy数组。代码中的arange函数前面有一个前缀numpy,表明该函数是从NumPy模块导入的。

让我们来看看纯Python代码和NumPy代码是否得到相同的结果:

import sys
from datetime import datetime
import numpy as np#省略上面两处代码size = int(sys.argv[1])

start = datetime.now()
c = pythonsum(size)
delta = datetime.now() - start
print "The last 2 elements of the sum", c[-2:]
print "PythonSum elapsed time in microseconds", delta.microseconds

start = datetime.now()
c = numpysum(size)
delta = datetime.now() - start
print "The last 2 elements of the sum", c[-2:]
print "NumPySum elapsed time in microseconds", delta.microseconds

111.png

显然,NumPy代码比等价的纯Python代码运行速度快得多。有一点可以肯定,即不论我们使用NumPy还是Python,得到的结果是一致的。不过,两者的输出结果在形式上有些差异。注意,numpysum()函数的输出不包含逗号。这是为什么呢?显然,我们使用的是NumPy数组,而非Python自身的list容器。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Numpy 学习指南 NUM Day 习指南 return

trans 发表于 2015-11-6 08:15:36 |显示全部楼层 |坛友微信交流群
你好,numpy这个模块怎么安装呢,为什么我export时出现提示:can't  import multiarray?

使用道具

LordYiibey 学生认证  发表于 2017-11-3 19:55:46 |显示全部楼层 |坛友微信交流群
利益相关:python 3.6.1+
不用列表解析玩什么list?列表解析分分钟把numpy.narray打爆!成倍吊打!数据越大列表解析的优势越明显!
非得显着你在这里误人子弟!!

使用道具

modest2016 发表于 2019-1-15 22:07:45 |显示全部楼层 |坛友微信交流群
求《numpy学习指南》数据下载

使用道具

齐物论pi 学生认证  发表于 2019-1-18 04:02:53 来自手机 |显示全部楼层 |坛友微信交流群
实际上,numpy性能确实比list更高

使用道具

梦蛟龙 发表于 2019-7-11 10:27:24 |显示全部楼层 |坛友微信交流群
# >>> np.arange(3)
# array([0, 1, 2])
# >>> np.arange(3.0)
# array([ 0.,  1.,  2.])
# >>> np.arange(3,7)
# array([3, 4, 5, 6])
# >>> np.arange(3,7,2)
# array([3, 5])

# 尝试使用 range()创建整数列表(导致“TypeError: 'range' object does not support item assignment”)
#
# 有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。
#
# 该错误发生在如下代码中:
#
# spam = range(10)
# spam[4] = -1
# 也许这才是你想做:
#
# spam = list(range(10))
# spam[4] = -1
import datetime
import numpy as np


def numpysum(n):
    a = np.arange(n) ** 2
    b = np.arange(n) ** 3
    c = a + b
    return a, b, c


def pythonsum(n):
    a = list(range(n))
    b = list(range(n))
    c = []
    for i in range(len(a)):
        a[i] = i ** 2
        b[i] = i ** 3
        c.append(a[i] + b[i])
    return a, b, c


def main():
    start = datetime.datetime.now()
    s1 = numpysum(10)
    print(s1)
    print((datetime.datetime.now() - start).microseconds)

    start = datetime.datetime.now()
    s2 = pythonsum(10)
    print(s2)
    print((datetime.datetime.now() - start).microseconds)


if __name__ == '__main__':
    main()


/home/livingbody/PycharmProjects/knn00/venv/bin/python /usr/local/pycharm-2019.1.1/helpers/pydev/pydevconsole.py --mode=client --port=45691
import sys; print('Python %s on %s' % (sys.version, sys.platform))
sys.path.extend(['/home/livingbody/PycharmProjects/knn00'])
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.1 -- An enhanced Interactive Python. Type '?' for help.
PyDev console: using IPython 7.6.1
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
runfile('/home/livingbody/PycharmProjects/knn00/numpy/numpy00.py', wdir='/home/livingbody/PycharmProjects/knn00/numpy')
(array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81]), array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729]), array([  0,   2,  12,  36,  80, 150, 252, 392, 576, 810]))
443
([0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [0, 1, 8, 27, 64, 125, 216, 343, 512, 729], [0, 2, 12, 36, 80, 150, 252, 392, 576, 810])
21
看看443ms和21ms,明显比numpy有时间优势,这你怎么讲?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 09:23