Python学习笔记(二)——NumPy


Python可以用List当数组用,但是由于List的元素可以是任意对象,因此保存一个List需要保存所有指针和元素。非常消耗内存。

本文学习博客:用Python做科学计算 整理笔记,以待备用。

首先是NumPy函数库导入

importnumpy as np

创建数组

array

使用array可以创建多维数组

a = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9,10]])

shape

使用shape可以获得数组维数

a.shape
(3,4)

reshape

使用reshape以改变数组的尺寸

b=a.reshape((2,6))

但是要注意:这两个数组共享内存,修改其中一个,另一个也将发生变化。

创建数组的专门函数

arange:指定开始值、终值(不包括)、步长

np.arange(0,10,1.5)
array([ 0. , 1.5,  3. ,  4.5, 6. ,  7.5,  9. ])

linspace:指定开始值、终值(包括)、元素个数的等差数列

np.linspace(0,10,7)
array([0., 1.66666667, 3.33333333, 5., 6.66666667, 8.33333333,10.)

logspace: 指定开始值、终值(包括)、元素个数的等比数列

np.logspace(0,1,7)
array([1., 1.46779927, 2.15443469, 3.16227766,4.64158883, 6.81292069, 10.])

存取元素

-整数序列

a=np.arange(10,1,-1)
b=a[4,4,4,-2]
b
array([6,6,6,3])

注意:b和a不共享内存,所以改变其中任一个,另一个不会跟着改变。


-布尔数组

收集数组中对应下标为True的元素。

a=np.arange(5,0,-1)
a[np.array([True, True, True,False, False])]
array([5,4,3])

注意:

1.两数组不共享内存。

2.只可对应于布尔数组,而不能是布尔列表a[ [True, True, True,False,False]]

否则输出应为

array([4,4,4,5,5])


结构数组

创建dtype对象,字典有两个关键字:names,formats。

import numpy as np
people=np.dtype({
                 ‘names’:[‘name’,’ gender’]
                 ‘formats’:[‘S32’,’S32’]})
a=np.array([(‘LiuJingjing’,’Female’),(‘ChengYin’,’Male’)],dtype=people)

ufunc运算

x=np.linspace(0,np.pi,10)
t=np.sin(x,x)

这里sin的第二个参数是用来存结果的,上式表明x已经被覆盖了,与t的效果一样。

广播

广播就是数组大小不同,让他们看齐运算。

a=np.arange(10,70,10).reshape(-1,1)
b=np.arange(1,6)
c=a+b
c
array([[11, 12, 13, 14, 15],
       [21,22, 23, 24, 25],
       [31,32, 33, 34, 35],
       [41,42, 43, 44, 45],
       [51,52, 53, 54, 55],
       [61,62, 63, 64, 65]])


矩阵乘积

dot、inner、outer

其中dot做内积、inner最后一维做内积、outer展成列向量和行向量做矩阵乘积。

欢迎参与讨论并关注本博客和微博以及知乎个人主页后续内容继续更新哦~

转载请您尊重作者的劳动,完整保留上述文字以及文章链接,谢谢您的支持!

评论关闭