NumPy基础学习【1】- 基础用法,创建数组,打印数组

NumPy简易教程

1. 基础用法

NumPy的主要对象是齐次多维数组。它是由一个所有的元素都是同一类型,通过正整数元组索引的表格。在NumPy中维度叫做轴(axes)。

    例如,在3维空间中一个点的坐标为[1, 2, 1],就有一个轴,每个轴有三个元素,长度为3。如果像下面的数组,有两个轴,第一个轴的长度为2,第二个轴的长度为3。

>>> [[1,0,0],

     [0,1,2]]

    NumPy的数组类型叫做ndarray。更多重要的ndarray对象属性有:

  • ndarray.ndim 数组中轴的个数。
  • ndarray.shape 数组的维度,输出是一个整数元组。如一个n行m列的矩阵,shape函数输出为(n, m),元组的长度与ndim的输出相同。
  • ndarray.size 数组元素的总个数,相当于shape属性中元组元素的乘积
  • ndarray.dtype 数组中元素类型,数据类型可以是Python中的标准数据类型,也可以是numpy的特殊数据类型,如numpy.int32等。
  • ndarray.itemsize 数组中元素的字节大小。如元素类型为float64,字节大小为8;若元素类型为complex32,字节大小为4。与ndarray.dtype.itemsize效果相同

【例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

dtype('int32')

>>> a.itemsize

4

>>> a.size

15

>>> type(a)

<class 'numpy.ndarray'>

>>> b = np.array([6,7,8])

>>> b

array([6, 7, 8])

>>> type(b)

<class 'numpy.ndarray'>

2. 创建数组

    有很多种方法可以创建数组,如运用array函数对list或tuple数组创建数组,数组中的元素类型与序列中的类型相同。

>>> a = np.array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')

    常见的错误是array创建数组的时候,使用了多个数值参数,而不是使用一个列表作为参数。

>>> a = np.array(1,2,3,4)
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    a = np.array(1,2,3,4)
ValueError: only 2 non-keyword arguments accepted

    array函数通常将序列包含序列转换成二维数组,序列包含序列包含序列转换成三维数组,如此类推。(注意的是,每个序列的元素个数应该相同)

>>> 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提供了一些占位符创建数组的函数,最小化了扩展数组需要的昂贵代价。

    zeros创建全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)
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))
array([[1.5, 2. , 3. ],
       [4. , 5. , 6. ]])

    为创建数字序列,NumPy提供了类似于标准库中range的函数,但是返回值类型不再是list而是array。

>>> np.arange(10,30,5)
array([10, 15, 20, 25])

    但是当arange用于浮点数参数一起使用的时候,由于浮点数精度问题,通常无法预测获得的元素数量。因此,通常使用linspace函数,它使用想要得到的元素个数作为参数,而不是步长。

>>> from numpy import pi
>>> x = np.linspace(0,2*pi,10)
>>> x
array([0.        , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,
       3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])

3. 打印数组

    打印一个数组的时候,NumPy使用类似于嵌套列表的形式显示它,有以下的布局原则:

  •   最后的轴从左向右打印
  •   次后的轴从顶向下打印
  •   剩下的轴从顶向下打印,每个切片之间用空行隔开。

一维数组被打印成行,二维数组被打印成矩阵,三维数组被打印成矩阵列表。

>>> a = np.arange(6)
>>> print(a)
[0 1 2 3 4 5]
>>> b = np.arange(12).reshape(4,3)
>>> print(b)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
>>> c = np.arange(24).reshape(2,3,4)
>>> 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]]]

当一个数组的维度太大的时候,NumPy只打印出两端的元素。

>>> print(np.arange(10000).reshape(100,100))
[[   0    1    2 ...   97   98   99]
 [ 100  101  102 ...  197  198  199]
 [ 200  201  202 ...  297  298  299]
 ...
 [9700 9701 9702 ... 9797 9798 9799]
 [9800 9801 9802 ... 9897 9898 9899]
 [9900 9901 9902 ... 9997 9998 9999]]

如果强制打印出整个数组,则用set_printoptions来改变打印选项。

>>> np.set_printoptions(threshold='nan')

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值