【Python】numpy入门——ndarray数组

我用的是anaconda自带spyder写代码的。anconda是一款免费的集成开发环境,而且自带了numpy等数据分析模块,推荐给大家。

数组对象ndarray简介

之前我的文章中介绍过Python的列表,当时就说和数组挺像的,唯一的不同是列表内部的元素可以是不同的类型,比如字符串和整数同时存在在一个列表中是可以的。而数组类似于C语言的数组,只支持一种类型元素在一个数组中。
我们先来体验一下数组:

# -*- coding: utf-8 -*-
import numpy as np
def nusum():
    a=np.array([0,1,2,3,4])
    b=np.array([9,8,7,6,5])
    c=a**2+b**3
    return c
print(nusum())

执行结果

[729 513 347 225 141]

可以看到执行结果也是一个数组
numpy引入数组的好处是显而易见的:

  • 更容易优化,提升运算速度,numpy底层就是C语言写的
  • 使一维数组更像单个数据,不必用循环语句来运算,就比如上例,我们不用用for来挨个运算。

进一步了解ndarray,他由两部分构成

  • 实际的数据
  • 描述这些数据的元数据(数据维度,数据类型)
    ndarray生成的数组每一个中括号我们称之为轴(axis),一个轴实际上就是一个维度,同理我们把维度称为秩(rank),这里的理解和线性代数里面的矩阵一致。

ndarray对象属性

属性 说明
.nidm 维度,即秩
.shape 对象的尺度,就是矩阵的规模,n*m
.size 元素的个数
.dtype 元素类型
.itemsize 每个元素的大小,单位是字节

ndarray数组的创建方法

  1. 从列表,元组等类型创建ndarray数组:
    直接调用array函数即可,比如
x=np.array(a,dtype=np.int32)

如果第二个类型参数你没写,python会自动给你加上一个适合的类型。
2. 使用numpy自带的函数创建数组,比如:

函数 说明
np.arange(n) 生成一个从0-n-1的数组,返回一个ndarray
np.ones(shape) 返回一个全是1的数组
np.zeros(shape) 返回一个全是0的数组
np.full(shape,val) 返回一个全是val数值的的数组
np.eye(n) 返回一个n*n的矩阵,对角线为1,其余为0的数组
np.ones_like(a) 生成一个和数组a形状一样数组,元素全为1,同样的函数还有zeros_like()和full_like(a,val)
np.linspace() 在前两个参数范围里,等距离生成第三个参数数目的元素形成数组
np.concatenate 合并多个数组

还有一些对数组维度变换的函数:

方法 说明
.reshape(shape) 会返回一个shape形状的数组,元素不变,原数组不变
.resize(shape) 与reshape功能相同,但是会直接修改原数组
.swapaxes(ax1,ax2) 将两个维度调换
.flatten() 将数组降成一维,原数组不变

ndarray数组的操作

索引:

  • 一维数组:索引和列表类似,直接引用下标即可;
  • 多维数组:我们先创建一个数组,通过实例体会a=np.arange(24).reshape((2,3,4))
    结果:
array([[[ 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[1,2,3],返回23。这里我们就知道和一维数组类似,和数学中的矩阵索引也类似(array中索引从0开始,线代中是从1开始的)。

切片:

  • 一维数组:的切片也和列表类似,例如a[1:4:2]代表从第二个元素到第四个元素,左闭右开,步长为2的a数组的子集。我们重点讨论非一维数组,
  • 多维数组:同样一维数组切片类似,我们使用冒号来表示
a[:,1,:-2]

返回

array([[ 4,  5],
       [16, 17]])

第一个维度两边是空的,所以取了第一个维度所有值;第二个维度是1,所有只要每个维度第二行的元素;第三个维度是:-2,所有输出从第一到倒数第二个元素之前的元素。这里我建议你多尝试几次,通过实践体会切片。三维以上的切片我们就很难有直观的理解了,这里也不深入了。

数组的运算

  • 数组与标量运算等价于数组的所有元素与它运算。
  • 还有很多函数,比如取绝对值,开平方,我的想法是不用记,在实战中遇到你需要的你可以去查阅,慢慢常用的就能记住了。

尾声

这篇文章介绍了numpy库中基本数组的知识,后续我会通过一个项目融汇贯通numpy库的所有知识。

你可能感兴趣的:(【Python】numpy入门——ndarray数组)