numpy

Numpy概述

NumPy 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 是一个运行速度非常快的数学库,主要用于数组计算,主要功能包括线性代数、傅里叶变换、随机数生成等功能。底层核心是ndarray。

Numpy特点

  • 代码更简洁:Numpy直接以数组、矩阵为粒度进行计算,并且支持大量的数学函数;
  • 性能更高效:Numpy底层采用C语言实现、释放了GIL锁、算法更先进;
  • 是其他数据科学库的基础:Numpy是Pandas、SciPy、Scikit-Learn、Tensorflow等库的基础

Numpy安装

pip install numpy
pip install numpy -i https://pypi.douban.com/simple/

若pip安装不成功可以通过wheel方式安装

# whl文件名称是:numpy-1.21.1-cp38-cp38-win_amd64.whl,若安装不成功,将其名称改为numpy-1.21.1-cp38-none-win_amd64.whl
pip install numpy-1.21.1-cp38-cp38-win_amd64.whl
pip install numpy-1.21.1-cp38-none-win_amd64.whl

获取当前版本

import numpy as np
print(np.__version__)

获取帮助信息

import numpy as np
print(help(np.info(np.random.rand)))

ndarray对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

ndarray特点

  • ndarray 对象是用于存放同类型元素的多维数组
  • ndarray 中的每个元素在内存中都有相同存储大小的区域

ndarray内部结构

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

在这里插入图片描述

性能对比

import numpy as np
import time

def sum(n):
    param1 = [i ** 2 for i in range(n)]
    param2 = [i ** 3 for i in range(n)]
    result = []
    for i in range(n):
        result.append(param1[i] + param2[i])
    return result

time_begin = time.time()
sum(1000000)
time_end = time.time()
print(time_end - time_begin)  # 622ms

def sum1(n):
    param1 = np.arange(n) **2
    param2 = np.arange(n) **3
    return param1 + param2

time_start = time.time()
sum1(1000000)
time_stop = time.time()
print(time_stop - time_start)  # 9ms

Numpy基本操作

创建数组

array函数

import numpy as np
np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
import numpy as np

arr1 = np.array([1, 2, 3])
print(arr1)  # 一维数组

arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)  # 二维数组

arr3 = np.array([[[1, 2], [3, 4]], [[1, 2], [3, 4]]])
print(arr3)  # 三维数组

# 通过指定维数(ndim)创建数组
arr4 = np.array([1, 2, 3, 4, 5], ndmin=2)
print(arr4)  # [[1 2 3 4 5]]

python列表创建数组

import numpy as np

num_list = [4, 5, 6, 7]
result = np.array(num_list)
print(result)  # [4 5 6 7]
print(type(result))  # <class 'numpy.ndarray'>
print(result.size)  # 4
print(result.shape)  # (4,)

python元组创建数据

import numpy as np

num_list = (4, 5, 6, 7)
result = np.array(num_list)
print(result)  # [4 5 6 7]
print(type(result))  # <class 'numpy.ndarray'>
print(result.size)  # 4
print(result.shape)  # (4,)

python集合创建数组

import numpy as np

# 采用集合创建numpy数组时,将集合整体作为数组的一个元素
num_list = {
   4, 5, 6, 7}
result = np.array(num_list)
print(result)  # {4, 5, 6, 7}
print(type(result))  # <class 'numpy.ndarray'>
print(result.size)  # 1
print(result.shape)  # ()

字典创建数组

import numpy as np

# 采用字典创建numpy数组时,将字典整体作为数组的一个元素
dic_list = {
   
    "name": "Mary",
    "age": 18
}
result3 = np.array(dic_list)
print(result3)  # {'name': 'Mary', 'age': 18}
print(type(result3))  # <class 'numpy.ndarray'>
print(result3.size)  # 1
print(result3.shape)  # ()

通过集合和字典创建时属性值与预期不同。通常numpy与list结合使用

数据类型dtype

名称 描述
bool_ 布尔型数据类型(True 或者 False)
int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
intc 与 C 的 int 类型一样,一般是 int32 或 int 64
intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
int8 字节(-128 to 127)
int16 整数(-32768 to 32767)
int32 整数(-2147483648 to 2147483647)
int64 整数(-9223372036854775808 to 9223372036854775807)
uint8 无符号整数(0 to 255)
uint16 无符号整数(0 to 65535)
uint32 无符号整数(0 to 4294967295)
uint64 无符号整数(0 to 18446744073709551615)
float_ float64 类型的简写
float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
complex_ complex128 类型的简写,即 128 位复数
complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

默认类型

import numpy as np

num_list = np.array([3, 5, 6, 8])
print(num_list.dtype)  # int32

num_list1 = np.array([4.5, 2.4, 7.5])
print(num_list1.dtype)  # float64

num_list2 = np.array([1 + 3j, 3 + 5j])
print(num_list2.dtype)  # complex128

Numpy整形、浮点型、复数默认的值为int32、float64、complex128

指定类型创建数组

import numpy as np

arr = np.array([1, 2, 3, 4], dtype=bool)
print(arr)  # [ True  True  True  True]

arr1 = np.array([1, 2, 3, 4], dtype=np.float32)
arr1_1 = np.array([1, 2, 3, 4], dtype=float)
print(arr1)    # [1. 2. 3. 4.]
print(arr1_1)  # [1. 2. 3. 4.]

arr2 = np.array([1, 2, 3, 4], dtype=str)
print(arr2)  # ['1' '2' '3' '4']

arr3 = np.array([1, 2, 3, 4], dtype=np.complex64)
print(arr3)  # [1.+0.j 2.+0.j 3.+0.j 4.+0.j]

arr4 = np.array([1, 2, 3.5, '4'], dtype=object)
print(arr4)  # [1 2 3.5 '4']

通过指定类型创建数组时,np.int32与int等价;np.float64与float等价;np.complex128与complex等价。

Ndarray中的数据必须是同一类型,否则会自动向下转换。int -> float -> str

import numpy as np

arr1 = np.array([1,2,3,4,'5'])
print(arr1)   # ['1' '2' '3' '4' '5']

arr2 = np.array([1,2,3,4,5.0])
print(arr2)  # [1. 2. 3. 4. 5.]

数组属性

属性 描述
dtype 数据类型
ndim 维度数量或轴的数量
shape 维度或形状(行,列)
size 元素个数
itemsize 元素字节数
nbytes 数组总共字节数 (nbytes = size * itemsize)

数组属性操作

import numpy as np

# 一维数组
arr1 = np.array([4, 5, 6])
print(type(arr1))  # <class 'numpy.ndarray'>
print(arr1.dtype)  # int32
print(arr1.size)  # 3
print(arr1.ndim)  # 1
print(arr1.shape)  # (3,)
print(arr1.itemsize)  # 4 (整形占4个字节)
print(arr1.nbytes)  # 12

# 二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(type(arr2))  # <class 'numpy.ndarray'>
print(arr2.dtype)  # int32
print(arr2.size)  # 6
print(arr2.ndim)  # 2
print(arr2.shape)  # (2, 3)
print(arr2.itemsize)  # 4 (整形占4个字节)
print(arr2.nbytes)  # 24

shape()函数以元组的形式返回数组的形状,若数组是一维的,返回数组元素个数

改变数组维度

import numpy as np

arr = np.array([3, 5, 8, 5, 3, 7, 6, 3, 7])
print(arr
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值