numpy概述、n维数组ndarray属性、数组维数形状、ndarray数组类型

一、numpy 概述

Numpy(Numerical Python):是一个开源的Python科学计算库,用于快速处理任意维度的数组,Numpy支持常见的数组和矩阵操作

  • 对于同样的数值计算任务,用Numpy比直接用Python要简洁的多,Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器
  • 提供一个N维数组类型ndarray,它描述了相同类型的“items”的集合
  • 生成numpy对象:np.array()

2.1用ndarray进行存储数组 

import numpy as np

# 创建ndarray
number = np.array(
[[88, 89, 87, 67, 79],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[94, 92, 93, 67, 64]
])

number

 结果如下

机器学习特点:大量的数据运算,若无快速的解决方案,python在机器学习领域可能也达不到好的效果

Numpy专门针对ndarray的操作和运算进行了设计,所以数组的存储效率和输入输出性能远优于Python中的嵌套列表,数组越大,Numpy的优势就越明显

2.2 ndarray优势

  • 内存块风格:ndarray存储数据时数据与数据的地址都是连续的,使得批量操作数组元素时速度更快,其原因在于
    • ndarray中所有元素的类型都是相同的,在存储元素时内存可以连续(一体式存储,存储类型相同)
    • 而python原生list中的元素类型是任意的,只能通过寻址方式找到下一个元素(分离式存储,存储内容多样化)
    • 这虽然导致了在通用性能方面Numpy的ndarray不及Python原生list,但在科学计算中,ndarray可以省掉很多循环语句,代码使用方面比Python原生list简单的多
  • 支持并行化运算(向量化运算):numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算
  • 效率远高于纯python代码:Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,所以,其效率远高于纯Python代码
import random
import time
import numpy as np
a = []
for i in range(100000000):
    a.append(random.random())

# 通过%time魔法方法, 查看当前行的代码运行一次所花费的时间
%time sum1=sum(a)   # 原生Python计算时间
b=np.array(a)
%time sum2=np.sum(b)   # numpy计算时间

 结果如下

二、n维数组-ndarray

2.1 ndarray属性

数组属性反映了数组本身固有的信息

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维数
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型
import numpy as np

# 创建ndarray
number = np.array(
[[88, 89, 87, 67, 79],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[94, 92, 93, 67, 64]
])

print(number.shape)   # (5, 5)
print(number.ndim)  # 2
print(number.size)   # 25
print(number.itemsize)   # 4
number.dtype    # dtype('int32')

输出如下

2.2 数组维数形状

a = np.array([[1,2,3],[4,5,6]])   # 二维数组
a.shape   # (2, 3)
b = np.array([1,2,3,4,5])   # 一维数组
b.shape   # (5,)
c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])   # 三维数组
c.shape   # (2, 2, 3)

 结果如下

2.3 ndarray数组类型

名称描述简写
np.bool用一个字节存储的布尔类型(True或False)'b'
np.int8一个字节大小,-128 ~ 127'i'
np.int16整数,-32768 ~ 32767'i2'
np.int32整数,-2^31​ ~ 2^32 -1'i4'
np.int64整数,-2^63 ~ 2^63 - 1'i8'
np.uint8无符号整数,0 ~ 255'u'
np.uint16无符号整数,0 ~ 65535'u2'
np.uint32无符号整数,0 ~ 2^32 - 1'u4'
np.uint64无符号整数,0 ~ 2^64 - 1'u8'
np.float16半精度浮点数:16位,正负号1位,指数5位,精度10位'f2'
np.float32单精度浮点数:32位,正负号1位,指数8位,精度23位'f4'
np.float64双精度浮点数:64位,正负号1位,指数11位,精度52位'f8'
np.complex64复数,分别用两个32位浮点数表示实部和虚部'c8'
np.complex128复数,分别用两个64位浮点数表示实部和虚部'c16'
np.object_python对象'O'
np.string_字符串'S'
np.unicode_unicode类型'U'

创建数组时可指定类型,若不指定,整数默认int64,小数默认float64,演示如下

学习导航:http://xqnav.top/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

learning-striving

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值