Python学习(十)——NumPy入门

导入模块

导入整个模块:

>>> import numpy
>>> a=numpy.array((1,2,3))
>>> print a
[1 2 3]

导入模块中的指定函数:

>>> from numpy import array
>>> b=array((4,5,6))
>>> print b
[4 5 6]

将numpy模块命名为np:

>>> import numpy as np
>>> c=np.array((7,8,9))
>>> print c
[7 8 9]

==============================

处理数组

1、使用ndarray创建数组

ndarray对象(N-dimensional array object)
Python中的list的每个元素本质是对象,对于数值运算较为浪费。因此numpy提供了ndarray对象来存储单一数据类型的多维数组。

①使用array创建:

通过向array函数传递序列创建多维数组:
传递list、tuple:

import numpy as np
a=np.array([4,5,6])
b=np.array((1,2,3))
print a,b

输出:
[4 5 6] [1 2 3]
传递多层嵌套序列:

a=np.array([[4,5,6],[7,8,9],[0,1,2]])
b=np.array(((1,2,3),(4,5,6),(7,8,9)))
c=np.array([(1,4,7),(2,5,8),(3,6,9)])
d=np.array(([9,8,7],[6,5,4],[3,2,1]))
print a,'\n',b,'\n',c,'\n',d

输出:
[[4 5 6]
[7 8 9]
[0 1 2]]
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 4 7]
[2 5 8]
[3 6 9]]
[[9 8 7]
[6 5 4]
[3 2 1]]

②查看数据类型:
a=np.array([(1,4,7),(2,5,8),(3,6,9)])
print type(a)

输出:

③通过shape属性查看数组大小:
a=np.array([(0,1,4,7,10),(-1,2,5,8,11)])
b=np.array((0,1,2,3,4,5))
print a.shape
print b.shape

输出:
(2L, 5L)
(6L,)
结果(2L, 5L) 表示2行5列,L表示长整型;

④修改shape
a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)])
a.shape=2,6
print a

输出:
[[ 1 4 7 10 2 5]
[ 8 11 21 15 8 11]]

行或列置为-1,则系统会根据设置的列或行值自动计算;

a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)])
a.shape=4,-1
print a

输出:
[[ 1 4 7]
[10 2 5]
[ 8 11 21]
[15 8 11]]

⑤使用reshape,保持原数组的shape不变:
a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)])
b=a.reshape((2,-1))
print 'a=\n',a
print 'b=\n',b

输出:
a=
[[ 1 4 7 10]
[ 2 5 8 11]
[21 15 8 11]]
b=
[[ 1 4 7 10 2 5]
[ 8 11 21 15 8 11]]

注意:reshape并非新建了一个数据,二者共享内存,任意一个改变都会将数据修改;

a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)])
b=a.reshape((2,-1))
b[0][0]=100
print 'a=\n',a
print 'b=\n',b

输出:
a=
[[100 4 7 10]
[ 2 5 8 11]
[ 21 15 8 11]]
b=
[[100 4 7 10 2 5]
[ 8 11 21 15 8 11]]

⑥通过dtype属性获取数组元素的类型或指定元素类型:

1)获取元素类型:

a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)])
print a.dtype

输出:
int32
即32位的整型
2)指定元素类型:

a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)],dtype=np.float)
print a.dtype
print a

输出:
float64
[[ 1. 4. 7. 10.]
[ 2. 5. 8. 11.]
[ 21. 15. 8. 11.]]

⑦通过astype改变元素类型:
a=np.array([(1,4,7,10),(2,5,8,11),(21,15,8,11)],dtype=np.float)
b=a.astype(np.complex)
print b
print b.dtype

输出:
[[ 1.+0.j 4.+0.j 7.+0.j 10.+0.j]
[ 2.+0.j 5.+0.j 8.+0.j 11.+0.j]
[ 21.+0.j 15.+0.j 8.+0.j 11.+0.j]]
complex128

2、使用函数创建数组

①arange函数左闭右开区间+步长:
a=np.arange(1,5,0.2)
print a

输出:
[ 1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3. 3.2 3.4 3.6 3.8
4. 4.2 4.4 4.6 4.8]
arrange函数前两个参数为输出数列的区间[1,5),为一个左闭右开区间;第三个参数为步长。

②linspace函数给定起始值、终止值+元素个数:
a=np.linspace(1,5,5)
print a

输出:
[ 1. 2. 3. 4. 5.]
linspace函数通过给定起始值、终止值和元素个数来创建数组。
也可以通过endpoint关键字指定是否包含终止值;

a=np.linspace(1,5,5,endpoint=False)
print a

输出:
[ 1. 1.8 2.6 3.4 4.2]

③logspace函数创建等比数列:
a=np.logspace(1,3,10)
print a

输出:
[ 10. 16.68100537 27.82559402 46.41588834 77.42636827
129.1549665 215.443469 359.38136638 599.48425032 1000. ]
即,起始值为10^1,终止值为10^3,元素个数为10的等比数列。

④使用formbuffer、formstring、formfile等函数将字符序列转为数组:
s='ABCDabcd'
a=np.fromstring(s,dtype=np.int8)
print a

输出:
[ 65 66 67 68 97 98 99 100]

3、对数组中缺失和无穷的处理

缺失:np.nan
无穷:np.inf
np.nan_to_num():使用0代替数组x中的nan元素,使用有限的数字代替inf元素

x = np.array([-12, np.inf, np.nan, -np.inf, np.nan, 91])
# 使用0代替数组x中的nan元素,使用有限的数字代替inf元素
y = np.nan_to_num(x)
print x
print y

输出:

[-12.  inf  nan -inf  nan  91.]

[ -1.20000000e+001   1.79769313e+308   0.00000000e+000  -1.79769313e+308
   0.00000000e+000   9.10000000e+001]

==============================

处理矩阵

tile(A,reps) 通过重复A构建一个数组,由reps给出的次数。

import numpy as np
m0= np.tile([10, 50], (3, 2))
print m0

输出:

[[10 50 10 50]
 [10 50 10 50]
 [10 50 10 50]]

注意:求矩阵行列式和矩阵的逆时必须为n*n矩阵

np.prod()返回数组元素在给定轴上的乘积

默认为全部元素乘积:

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

输出

20160
20160

沿列方向(axis=0)/沿行方向(axis=1):

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

输出:

[ 6 40 84]

np.linalg.det():求矩阵行列式的值(标量)

import numpy as np
m1 = [[1, 5, 9],
      [3, 7, 7],
      [3, 9, 1]]
print np.linalg.det(m1)

输出:

88.0

np.linalg.inv():求矩阵的逆

import numpy as np
m1 = [[1, 5, 9],
      [3, 7, 7],
      [3, 9, 1]]
print np.linalg.inv(m1)

输出:

[[-0.63636364  0.86363636 -0.31818182]
 [ 0.20454545 -0.29545455  0.22727273]
 [ 0.06818182  0.06818182 -0.09090909]]

np.linalg.norm()求解向量及矩阵的范数

向量:

import numpy as np

m1 = [1, 2, 3, 1]

# ℓ1范数
print np.linalg.norm(m1, 1)
# ℓ2范数
print np.linalg.norm(m1, 2)
# 默认为ℓ2范数
print np.linalg.norm(m1)
# ℓ∞范数
print np.linalg.norm(m1, np.inf)

输出:

7.0
3.87298334621
3.87298334621
3.0

矩阵:

import numpy as np

m1 = [[1, 9, 2],
      [3, 7, 7],
      [3, 8, 1]]
# ℓ1范数
print np.linalg.norm(m1, 1)
# ℓ2范数 
print np.linalg.norm(m1, 2)
# 默认为ℓ2范数
print np.linalg.norm(m1)
# ℓ∞范数
print np.linalg.norm(m1, np.inf)

输出:

24.0
15.5766228477
16.3401346384
17.0

注:
矩阵的ℓ1范数,又名列和范数,即矩阵列向量中绝对值之和的最大值。
这里写图片描述
矩阵的ℓ2范数,又名谱范数,计算方法为(A转置)A`A矩阵的最大特征值的开平方。(其中λ1为A`A的最大特征值。)
这里写图片描述
矩阵的ℓ∞范数,又名行和范数。即矩阵行向量中绝对值之和的最大值。
这里写图片描述


这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python学习顺序和相应的资料推荐,我可以给你一些建议。首先,建议你先学习Python的基础知识,包括语法、数据类型、流程控制等。可以从下面这些资料中选择一个作为学习的起点: 1. 《Python编程快速上手——让繁琐工作自动化》:这是一本适合初学者的入门书籍,有助于快速掌握Python的基础知识。 2. Python官方文档:官方文档是最权威的Python学习资料,详细介绍了Python的语法和标准库的使用方法。 3. 《笨方法学Python》:这本书通过一系列的练习帮助读者学习Python的基础知识,适合喜欢动手实践的学习者。 一旦你掌握了基础知识,可以继续深入学习Python的高级特性和常用库。以下是一些推荐的资料: 1. 《流畅的Python》:这本书详细介绍了Python的高级特性和最佳实践,适合有一定经验的Python开发者。 2. 《Python Cookbook》:这本书收集了Python编程中常见的问题和解决方案,是提高编程技巧的好资料。 3. 官方文档和在线教程:Python有很多常用的库,如NumPy、Pandas、Matplotlib等,官方文档和在线教程是学习这些库的好资源。 4. CSDN等技术博客:CSDN等技术博客上有很多Python相关的教程和实例,可以帮助你在实践中提升自己的编程能力。 最后,我还建议你多进行实践,通过做项目来巩固所学的知识。不断练习和实践是提高编程能力的关键。希望这些资料推荐对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值