NumPy之一:基本操作

  NumPy的主要对象是同类多维数组,这是一个相同类型的元素(通常是数字)组成的表。在NumPy中,维度称为axis,axis的数量叫做rank

  例如,三维空间中的一个坐标为[1, 2, 1]的点,即为rank=1的数组,因为这个数组只有一个axis。有些人可能会有疑惑,不是说三维空间么,为什么说它只有一个axis呢?axis可以理解成轴,抛开这个点,单看这个数组[1, 2, 1],它确实只需要一个axis即可表示。这个axis长度为3。

  又如,[[ 1., 0., 0.],[ 0., 1., 2.]],这个数组的rank=2(2维的)。第一维(axis)长度为2,第二维长度为3。
  
  也可以这么理解,数组是由2个行向量组成,所以第一维长度为2,每个行向量由3个向量(点)组成,所以第二维长度为3。

  Numpy的数组类称为ndarray。numpy.array和Python标准库中的array.array是两回事,标准库中的array.array只能处理一维数组且只提供了少数的功能。ndarray对象中更加重要的特性如下:

  • ndarray.ndim
    数组的axis(维)的数量。在Python中,维的数量被称作rank。

  • ndarray.shape
    数组的各个维(注意和维和维数要区分开)。它是一个数组各个维的长度构成的整数元组。对n行m列矩阵而言,shape将是(n,m)。因此,shape元组的长度也就是rank,也是维数ndim。

  • ndarray.size
    数组所有元素总数量。等于shpe元组各元素的乘积。

  • ndarray.dtype
    一个描述数组中元素类型的对象。用户可以使用Python标准类型创建或指定dtype。此外,NumPy还提供了其自有的类型,比如numpy.int32, numpy.int16, numpy.float64。

  • ndarray.itemsize
    数组各元素的占多少字节。比如,一个元素类型是float64的数组,其itemsize为8(=64/8,64位除以8)。同理,元素类型是complex32的数组的itemsize为4(=32/8)。ndarray.itemsize等于ndarray.dtype.itemsize。

  • ndarray.data
    装载数组真实元素的缓冲区。通常,我们用不到这个属性,因为我们一般使用索引访问数组元素。

1. 一个例子

>>> 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'>

2. 创建数组

  有多种方法来创建数组。
  你可以利用常规的Python列表或元组同伙array函数来创建一个数组。创建出的数组类型和序列元素类型是一致的。

>>> import numpy as np
>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
>>> c = np.array(('a','b','c'))
>>> c
array(['a', 'b', 'c'],
      dtype='|S1')
>>> c.shape
(3,)
>>> c.size
3
>>> c.ndim
1
>>> c.dtype
dtype('S1')

  注意,array函数只接收一个参数,且这个参数是一个python序列。常见的错误是给array函数传递多个数字作为参数,如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]])

  一般情况是,数组元素最初是未知的,但其size是已知的。因此,NumPy提供了一些函数,利用初始的占位符来创建数组。这些函数减少了费时费力的手动填充数组的成本。

  函数zeros可以创建一个全部填充0的数组;函数ones创建的数组全部填充为1;函数empty创建的函数的初始内容是随机的,依赖于内存状态。默认情况下,这些函数创建的数组的dtype是float64。

>>> a = np.zeros((3,4))
>>> a
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值