8-Python 科学计算_numpy 篇

课程概要:
  1、Python 科学计算介绍
  2、Numpy 之 ndarray 对象
  3、Numpy 之 ufunc 运算
  4、Numpy 之 矩阵运算

1、Python 科学计算介绍

一、什么是科学计算?

是一个与数学模型构建、定量分析以及利用计算机来分析和解决科学问题相关的研究领域。

二、Python 与科学计算

Python 语法简单易学
  拥有numpy、scipy、matplotlib等库
  跨平台,开源免费

三、Python 中常用的的科学计算库

numpy
   scipy
   pandas
   matplotlib

四、python(x,y)中包含很多的库(尽管有很多用不到),还是很好用的


2、numpy 之 ndarray 对象

一、array()

import numpy as np

a =np.array([1,2,3,4])             #       array([1,2,3,4])
b =np.array((1,2,3,4))             #       array([1,2,3,4])
c =np.array([[1,2,3],[2,3,4]])           

c.dtpye                                                   #       dtype(“int64”)

c.shape                                                   #       (2,3)
c =np.array([[1,2,3],[2,3,4]])

c.shape = -1,2                                       

当c.shape 中有一个 -1 值,就会自动补齐。以-1,2中的2为准,表示2列。

n = c.reshape((2,3))                            

n[0][0] = 10                                            

n                                                              

c                                                             

n和c共享一个内存,当改变n中的数组元素的值时,c中也会相应地改变。

np.array(1,10,2)            #       array([1,3,5,7,9])

np.logspace(1,10,3)         #       在1到10中生成等比数列,3代表3个元素
s ="hello"

np.fromstring(s,dtype= np.int8)  #       生成字符串每个元素的ascii值的数组

#       array([104, 101, 108, 108, 111], dtype=int8), h的ascii值为104
a= np.array([1,2,3])

a[0]                              #       1
a[1:2]                           #       array([2])              
a[1]= 10                                                 

a                                #       array([1,10,3])

二、定义结构体数组

>>>person = np.dtype({'names':['name','age'],'formats':['S32','i']})                
# ‘S32’—32字节字符串类型,’i’—int32

>>>person
dtype([('name','S32'), ('age', '<i4')])

>>> a =np.array([('zhang',12)],dtype = person)
>>> a
array([('zhang',12)],dtype=[('name', 'S32'), ('age','<i4')])

>>>a[0]
('zhang', 12)

>>>a[0][0]
'zhang'

>>>a[0][1]
12

>>>a[0]['name']
'zhang'

>>>a[0]['age']
12

3、numpy 之ufunc 运算

>>>
x = np.arange(1,10,1)

>>> x
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> y = np.sin(x)                    #       计算x数组中每个元素的正弦值
>>> y

下面看看使用标准库和ufunc库计算数据的使用时间

>>> import numpy as np
>>> from time import time
>>> x = [i*0.001 for i in xrange(10000)]
>>> start = time()
>>> import math
>>> for i,t in enumerate(x):
         x[i] = math.sin(t)

>>> print time() - start
190.217000008
>>> x = [i*0.001 for i in xrange(10000)]
>>> x = np.array(x)
>>> start = time()
>>> np.sin(x,x)

>>> print time() - start

36.5990002155

可见使用numpy库进行数据运算,其效率远远大于标准库

>>>x = np.array([1,2,3])
>>> y = np.array([3,2,4])

>>> x + y                                                 
array([4, 4, 7])

>>> x - y
array([-2,  0, -1])

>>> x * y
array([ 3,  4, 12])

>>> x / y

array([0, 1, 0])

>>> x ** y
array([ 1,  4, 81])

运算均是数组中同一索引下的元素的运算,如果元素不对应,则不能进行运算

import numpy as np

def func(x,c,c0,hc):
    x = x - int(x)
    if x >= c: r = 0.0
    elif x < c0: r = x/c0*hc
    else:
        r = ((c-x)/(c-c0))*hc
 
    return r

print func(1,0.6,0.4,1.0)                          #       0.0

print func(0.2,0.6,0.4,1.0)                      #       0.5

print func(0.4,0.6,0.4,1.0)                     #       1.0
x = np.linspace(0,2,100)               #       生成一个0到2的100个元素的列表
y = np.array( [ func(t,0.6,0.4,1.0) for t in x] )

print y
x =np.linspace(0,2,100)
funcs =np.frompyfunc(lambda x:func(x,0.6,0.4,1.0),1,1)       

#两个1表示一个输入参数,一个为输出参数,是np.frompyfunc的参数

y = funcs(x)

print y
def func(c,c0,hc):
    def trifunc(x):
        x = x - int(x)
        if x >= c: r = 0.0
        elif x < c0: r = x/c0*hc
        else:
            r = ((c-x)/(c-c0))*hc
        return r

    return np.frompyfunc(trifunc,1,1)            #       生成的是一个函数对象

x =np.linspace(0,2,100)
y =func(0.6,0.4,1.0)(x)

print y

# print y.astype(np.float64)        
#  frompyfunc不能保证返回的内容数据类型一致

4、numpy 之矩阵运算

>>> a =np.arange(12).reshape(2,3,2)

# arange使用和range的使用方法一样。reshape(2,2,3)转换成2个2行3列的矩阵
>>> b =np.arange(12,24).reshape(2,2,3)

>>> c = np.dot(a,b)                                                         #       将a,b两个数组相乘
b =np.arange(12,24).reshape(2,3,2)

>>> c =np.inner(a,b)                                             #       a,b两个数组的内乘
>>> c =np.outer([1,2,3],[4,5,6])                         #       a,b 两个数组的外乘

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

推荐阅读更多精彩内容