栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

NumPy的学习(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NumPy的学习(一)

什么是numpy

简单的说 NumPy就是Python众多库中的其中一个 可以用来做科学计算。NumPy包的核心是 ndarray 对象。它封装了python原生的同数据类型的 n 维数组 为了保证其性能优良 其中有许多操作都是代码在本地进行编译后执行的。

如果想了解更多可以前往什么是 NumPy学习更多 如果英语水平不错的话也可以看What is NumPy 。

基础知识

NumPy 库中数组被调用ndarry 也被叫为array。但是numpy.array和标准的Python中的array.array并不一样 后者只能处理一维数据 而前者可以实现多维的数据处理。

ndarry有以下的属性

ndarry.ndim  数组的维的个数。ndarray.shape  数组的维度 输出(n,m) 表示数组是一个n行m列的矩阵。ndarray.size  数组元素的总数。这等于 shape 的元素的乘积。ndarray.dtype  一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。ndarray.itemsize  数组中每个元素的字节大小。ndarry.data  该缓冲区包含数组的实际元素。通常 我们不需要使用此属性 因为我们将使用索引访问数组中的元素。

为了方便 直接将NumPy中的例子搬运过来了

# 导入NumPy库并称为np
 import numpy as np
# 创建一个三行五列的数组a
 a np.arange(15).reshape(3, 5)
array([[ 0, 1, 2, 3, 4],
 [ 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14]])
 a.shape
(3, 5)
 a.ndim
 a.dtype.name
 int64 
 a.itemsize
 a.size
 type(a)
 type numpy.ndarray 
 b np.array([6, 7, 8])
array([6, 7, 8])
 type(b)
 type numpy.ndarray 
创建数组

创建数组最基本的方法是a numpy.array([x1, x2, x3]),常见的创建数组有以下几种方法

 import numpy as np
# 创建一维数组
 a np.array([2,3,4])
array([2, 3, 4])
# 创建二维数组
 b np.array([(1.5,2,3), (4,5,6)])
array([[ 1.5, 2. , 3. ],
 [ 4. , 5. , 6. ]])
#创建复数的二维数组
 c np.array( [ [1,2], [3,4] ], dtype complex )
array([[ 1. 0.j, 2. 0.j],
 [ 3. 0.j, 4. 0.j]])
# 创建3行4列的元素全为0的数组
 np.zeros( (3,4) )
array([[ 0., 0., 0., 0.],
 [ 0., 0., 0., 0.],
 [ 0., 0., 0., 0.]])
# 创建2页3行4列的元素全为1的数组
 np.ones( (2,3,4), dtype np.int16 ) # dtype can also be specified
array([[[ 1, 1, 1, 1],
 [ 1, 1, 1, 1],
 [ 1, 1, 1, 1]],
 [[ 1, 1, 1, 1],
 [ 1, 1, 1, 1],
 [ 1, 1, 1, 1]]], dtype int16)
# 创建一个2行3列的元素值随机的数组
 np.empty( (2,3) ) # uninitialized, output may vary
array([[ 3.73603959e-262, 6.02658058e-154, 6.55490914e-260],
 [ 5.30498948e-313, 3.14673309e-307, 1.00000000e 000]])
# 创建范围等距离的数组
 np.arange( 10, 30, 5 )
array([10, 15, 20, 25])
 np.arange( 0, 2, 0.3 ) # it accepts float arguments
array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
# 此外 还可以像MATLAB中一样 用linspace创建数组
 from numpy import pi
 np.linspace( 0, 2, 9 ) # 9 numbers from 0 to 2
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
 x np.linspace( 0, 2*pi, 100 ) # useful to evaluate function at lots of points
 f np.sin(x)
数组的打印

 使用print语句可以输出数组 例如

 a np.arange(6) # 1d array
 print(a)
[0 1 2 3 4 5]
 b np.arange(12).reshape(4,3) # 2d array
 print(b)
[[ 0 1 2]
 [ 3 4 5]
 [ 6 7 8]
 [ 9 10 11]]
 c np.arange(24).reshape(2,3,4) # 3d array
 print(c)
[[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]
 [[12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]]
运算操作

 数组上的运算一般是对元素进行操作的 因此有下面例子

 a np.array( [20,30,40,50] )
 b np.arange( 4 )
array([0, 1, 2, 3])
 c a-b
array([20, 29, 38, 47])
 b**2
array([0, 1, 4, 9])
 10*np.sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
 a 35
array([ True, True, False, False])

此外还有 、* 这些运算符也是可以对数组进行操作的 并且也是直接对数组的 元素进行操作

 a np.ones((2,3), dtype int)
 b np.random.random((2,3))
 a * 3
array([[3, 3, 3],
 [3, 3, 3]])
array([[ 3.417022 , 3.72032449, 3.00011437],
 [ 3.30233257, 3.14675589, 3.09233859]])
 a b # b is not automatically converted to integer type
Traceback (most recent call last):
TypeError: Cannot cast ufunc add output from dtype( float64 ) to dtype( int64 ) with casting rule same_kind 

  可以看出每个运算符的操作对象都是元素 然而学过线性代数都知道矩阵相乘遵循前行乘后列的规则 因此对于矩阵之间的乘法有新的运算符 在Python 3.5中 或用 dot函数执行

 A np.array( [[1,1],
... [0,1]] )
 B np.array( [[2,0],
... [3,4]] )
 A * B # elementwise product
array([[2, 0],
 [0, 4]])
 A B # matrix product
array([[5, 4],
 [3, 4]])
 A.dot(B) # another matrix product
array([[5, 4],
 [3, 4]])

本文所有代码均来自NumPy官网 仅对其稍加修改。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267798.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号