利用Python进行数据分析 | NumPy基础(一)—— NumPy ndarray(多维数组对象)

NumPy基础:数组与向量化计算

NumPy,是Numerical Python的简称,它是利用Python进行数值运算的最为重要的基础包。

重要的原因可以归纳为三点:

  1. 可以有效的处理含有大量数组的数据。
  2. NumPy的算法是基于C语言编写的,NumPy数组使用的内存量小于其他的Python内建序列。
  3. NumPy可以针对全量数组进行复杂计算而不需要使用Python循环。

下面的例子将展示NumPy的不同,定义一个NumPy数组,里面存放着1M个整数,再定义一个列表,同样存放着1M个整数,将这两个序列同时乘以2,比较它们运算时间的差异。

In [8]: import numpy as np
In [9]: my_arr = np.arange(1000000)
In [10]: my_list = list(np.arange(1000000))
In [12]: %timeit my_arr2=my_arr*2
2.21 ms ± 19.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [13]: %timeit my_list2=[x*2 for x in my_list]
200 ms ± 1.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

NumPy ndarray:多维数组对象

ndarray是Python中一个快速、灵活的多维同类数据容器,也就是说,它包含的每一个元素都是相同的数据类型。每一个数组都有一个shape属性,用来表征数组每一个维度的数量;每一个数组都有一个dtype属性,用来描述数组的数据类型。

In [14]: data = np.random.randn(2,3)
In [15]: data
Out[15]: 
array([[ 0.1049642 , -0.52542354, -0.07641538],
       [ 0.5484492 , -0.95387232,  0.84849499]])
In [18]: data.shape
Out[18]: (2, 3)
In [19]: data.dtype
Out[19]: dtype('float64')

建议使用标准的NumPy导入方式import numpy as np,numpy这个命名空间中包含了大量与Python内建函数重名的函数(比如min,max)。

In [9]: np.arange(10)
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#arange是python内建函数range的数组版

不论是“数组”,“NumPy数组”还是“ndarray”,它们都表示同一个对象,ndarray对象。

1、生成ndarray

1.1 使用array函数生成数组

In [21]: data1=[6.,3.4,9.,0.,1.]
In [22]: arr1=np.array(data1)
In [23]: arr1
Out[23]: array([6. , 3.4, 9. , 0. , 1. ])
In [24]: data2=[1,2,3],[4,5,6]
In [25]: arr2=np.array(data2)
In [26]: arr2
Out[26]: 
array([[1, 2, 3],
       [4, 5, 6]])

1.2 使用其他函数创建新数组

In [5]: np.zeros(10)
Out[5]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [6]: np.zeros((3,6))
Out[6]: 
array([[0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0.]])
In [7]: np.empty((2,3,2))
Out[7]: 
array([[[6.23042070e-307, 1.89146896e-307],
        [1.37961302e-306, 6.23053614e-307],
        [6.23053954e-307, 9.34609790e-307]],

       [[8.45593934e-307, 9.34600963e-307],
        [2.13621758e-306, 6.89804132e-307],
        [1.11261162e-306, 8.34443015e-308]]])

表1展示的是标准数组的生成函数。由于NumPy专注于数值计算,没有特别指明的话,默认的数值类型为浮点型(float64)。

表1:数组生成函数

函数名 描述
array 将输入数据(列表、元组、数组、序列或其他)转换成ndarray,如不显式指明数据类型,将自动推断;默认复制所有的输入数据
asarray 将输入转换为ndarray,但如果输入已经是nadarray则不再复制
arange Python内建函数arrange的数组版,返回一个数组
ones 根据给定形状和数据类型生成一个全1数组
ones_like 根据所给的数组生成一个形状一样的全1数组
zeros 根据给定形状和数据类型生成一个全0数组
zeros_like 根据所给的数组生成一个形状一样的全0数组
empty 根据给定形状和数据类型生成一个没有初始化数值的空数组
empty_like 根据所给的数组生成一个形状一样的没有初始化数值的空数组
full 根据给定形状和数据类型生成指定数值的数组
full_like 根据所给的数组生成一个形状一样的内容为指定数值的数组
eye,identity 生成一个N*N特征矩阵(对角线位置为1,其余位置为0)
2、ndarray的数据类型

数据类型 ,即dtype,表示数组里存储的数据类型,对于初学者,仅需要知道数据大类有哪些:浮点型、整数、布尔值、字符串以及某个python对象。

In [19]: arr1=np.array([1,2,3])
In [20]: arr1=np.array([1,2,3],dtype=np.float64)
In [21]: arr1.dtype
Out[21]: dtype('float64')

表2展示的是NumPy所支持的所有数据类型。

表2:Nu

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值