NumPy学习(一)

基础


NumPy的主要对象是齐次多维数组。表由相同类型的元素组成(通常为数字),由一个正整数元组索引。在NumPy中维数被称为轴,轴数称为秩。例如,一个三维空间中点的坐标[1,2,1]是一个秩为1的数组,因为其轴数为1,轴的长度为3。在下图中,数组的秩为2(2维),第二维的长度为3。

[[ 1., 0., 0.],
 [ 0., 1., 2.]]

NumPy的数组类是ndarray,也称array。需要注意numpy.array和标准Python库类array.array不同,后者只能处理一维数组,提供的功能较少。
ndarray对象的主要属性如下所示:
ndarray.ndim
数组的轴的数量(维度的数量)。也称为秩。
ndarray.shape
数组的维度。这是用一个整数元组表示每个维度的数组的大小。比如一个n行m列的矩阵,shape为(n,m)。shape元组的长度即为秩
或者称为维度的数量,即ndim。
ndarray.size
数组中元素的个数总和。等于shape元组中元素的乘积。
ndarray.dtype
描述数组中的元素类型。可以使用标准的额Python类型生成或指定dtype。除此之外NumPy提供可一些独有的类型,如numpy.int32
,numpy.int16, numpy.float64等。
ndarray.itemsize
数组中每个元素的字节数的大小。例如,float64类型元素的itemsize值为8=(64/8),complex32类型元素的itemsize值为4=(32/8)。等同于ndarray.dtype.itemsize。
ndarray.data
包含实际数组元素的缓冲区。通常我们不会使用这个属性,因为我们将会使用索引来获取数组中的元素。
实例:

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

建立数组


有许多方法可以用来创建数组,比如利用numpy的array方法从Python的list或tuple创建数组。如上图所示。
但是array方法不能直接接收一串数字,如下图所示:

>>> a = np.array(1,2,3,4)    # 错
>>> a = np.array([1,2,3,4])  # 对

将二维序列转换为二维数组:

>>> b = np.array([(1.5,2,3), (4,5,6)])
>>> b
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])

也可以在创建数组时指定元素类型:

>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

经常会碰到数组的元素实现不知道,仅直到数组的大小。因此,numpy提供一些功能创建拥有初始占位符的数组。尽可能减少数组的增长,这是个昂贵的操作。
zero方法创建一个元素全为0的数组,ones方法创建一个元素全为1的数组,empty方法创建一个元素内容随机且依赖内存状态的数组。默认情况下,创建的数组的元素类型为float64。

>>> np.zeros( (3,4) )
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> 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)
>>> 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]])

为了创建数字序列,numpy提供了类似Python中range的方法,arange返回的是数组而不是列表。

>>> np.arange( 10, 30, 5 )    # 起始10,终止30,步长为5
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 )
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

当arange接收浮点参数时,由于有限的浮点精度,通常不能预测可获得的元素数量。因此,更好的选择是用linspace接收指定生成的元素数量作为参数,替代arange中的步长。

>>> from numpy import pi
>>> np.linspace( 0, 2, 9 )                 # 返回从0到2中间的9个数,包括2
array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ,  1.25,  1.5 ,  1.75,  2.  ])
>>> x = np.linspace( 0, 2*pi, 100 )        # 可以利用多个点评价函数
>>> f = np.sin(x)

打印数组


当打印数组时,numpy提供了一个类似Python嵌套列表的方法,但是遵守以下布局:
* 最后的维度(轴)从左至右打印
* 倒数第二维从上至下打印
* 其他维也从上至下打印,每个切片下由一个空行分隔

>>> a = np.arange(6)                         # 1d 维
>>> print(a)
[0 1 2 3 4 5]
>>>
>>> b = np.arange(12).reshape(4,3)           # 2d 
  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值