numpy与ndarray数组

  • Numpy介绍
    • NumPy 提供了许多向量和矩阵操作,能让用户轻松完成最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号处理和图像处理、常微分方程求解以及其他科学与工程中常用的计算,不仅方便易用而且效率更高。
    • NumPy 是一个开源的Python科学计算基础库,是SciPy、Pandas等数据处理或科学计算库的基础。
    • NumPy 为开放源代码并且由许多协作者共同维护开发
    • NumPy底层用C语言编写,内部解除了GIL(全局解释性锁),其对数组的操作速度不受python解释器的限制,处理速度快,效率远高于纯python代码。
    • NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
      • 一个强大的N维数组对象 ndarray
      • 线性代数、傅里叶变换、随机数生成等功能

 
  • ndarray数组
    • NumPy中定义的最重要的对象是称为ndarray的N维数组对象(矩阵),它描述相同类型的元素集合。ndarray对象由计算机内存中的一维连续区域组成,ndarray中的每个元素在内存中使用相同大小的块
    • ndarray由两部分构成:
      • ①实际的数据;
      • ②描述这些数据的元数据(数据维度、数据类型等)
    • ndarray有两个基本的概念:
      • ①轴(axis):保存数据的维度
      • ②秩(rank):轴的数量,即这个数组有多少个维度 

 
  • ndarray对象的属性
    • 查看数组维度、形状、尺寸、元素类型等
属性
说明
.shape
ndarray对象维度的元组
.ndim
ndarray对象的维度
.size
ndarray对象中元素总数,相当于.shape中n*m的值
.dtype
ndarray对象的元素类型
.itemsize
ndarray对象中每个元素的大小,以字节为单位
 
# array的属性
def array_basic():
    # 定义一个数组,这里是 3*4 的二维数组
    arr = np.array([
        [1, 3, 5, 7],
        [2, 4, 6, 8],
        [3, 6, 9, 12]
    ])

    # 整个内容
    print("Content:\n", arr)

    # 维度,这里是二维矩阵数组
    print("dimension:", arr.ndim)

    # 形状,比如这里是(3, 4),三行四列
    print("shape:", arr.shape)

    # 尺寸,元素数量,这里是 3*4 = 12个
    print("size:", arr.size)

    # 元素数据类型
    print("dtype:", arr.dtype)

    # 每个元素的大小,以字节为单位
    print("itemsize:", arr.itemsize)

 


 
  • ndarray的数据类型及精度
    • ndarray支持这么多种元素类型的原因
      • 科学计算涉及数据较多,对存储和性能都有较高要求。
      • 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能。
      • 对元素类型精细定义,有助于程序员对程序规模有合理评估。
类型
说明
int8, uint8
有符号和无符号的8位(1个字节)整型
int16, uint16
有符号和无符号的16位(2个字节)整型
int32, uint32
有符号和无符号的32位(4个字节)整型
int64, uint64
有符号和无符号的64位(8个字节)整型
float16
半精度浮点数
float32
标准的单精度浮点数。与C的float兼容
float64
标准的双精度浮点数。与C语言的double和python的float对象兼容
float128
扩展精度浮点数
complex64, complex128, complex256
分别用两个32位,64位,128位浮点数表示的复数
bool
布尔类型,True 和 False
object
python对象类型
string_
固定长度的字符串类型(每个字符一个字节)。例如:要创建一个长度为20的字符串,应使用S20
unicode_
固定长度的Unicode类型(字节数由平台决定)跟字符串的定义方式一样
 

 
  • ndarray的创建
参数
描述
object
一切序列型的对象,比如:列表、元组等
dtype
数组的所需数据类型,可选。
copy
默认为true,对象是否被复制,可选
order
C(按行)、F(按列)或 A(任意,默认)
subok
默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
ndmin
指定返回数组的最小维数。

array = numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

arr = np.array([1, 2, 3], dtype=np.float32)

 


 
  •  arange() 创建范围内的等差数组
参数
说明
start
范围的起始值,默认为0
stop
范围的终止值(不包含)
step
步长,默认为1
dtype
指定填充值的数据类型,如果没有提供,则会使用输入数据的类型
 
array = numpy.arange(start, stop, step, dtype)

arr = np.arange(0, 12, 2, dtype=np.int64)

 


 
  • reshape()、zeros()、ones() 等
    • 通过 zeros(),ones(),分别生成全0、全1数组
    • 通过 reshape() 重置形状
# array
def numpy_array():
    # dtype: 指定数据data的类型,这里是int64,即64位精度的int
    arr = np.array([
        [1, 5, 9, 13],
        [2, 6, 10, 14]
    ], dtype=np.int64)

    # 生成一个形状是 3行4列,类型是float32型的元素全为 0 的数组
    arr0 = np.zeros(shape=(3, 4), dtype=np.float32)
    print("arr0:\n", arr0)

    # 生成一个形状是 3*2*4 类型是int64的元素全为 1 的数组
    arr1 = np.ones(shape=(2, 2, 5), dtype=np.int64)
    print("arr1:\n", arr1)

    # 改变数组形状为 4*2
    arr = arr.reshape(4, 2)
    print("reshape(4, 2):\n", arr)

    # 将数组转变成一维
    print("reshape(-1):\n", arr.reshape(-1))

 

posted @ 2021-01-11 17:53  a最简单  阅读(542)  评论(0编辑  收藏  举报