Numpy库(一):ndarray的创建与常用属性


一、Numpy库简介

Numpy(number python),一个重要的python语言数学运算库,在数据分析,机器学习,科学运算,图像处理等方面有重要的作用。他是大量Python数学与科学计算包的基础,内建了大量的函数,方便快速构建数学模型。

二、ndarray对象

Numpy库的核心是ndarray(N-dimensional array,N维数组)对象。它是一种指定了类型和大小的多维数组。

(1)创建数组

在Numpy库中,采用函数array() 进行创建数组,传入的参数为元组或列表。在创建数组时,可以通过指定dtype属性的值来设置数组的数据类型。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])					# 采用列表嵌套的形式传入参数
b = np.array(((1,2,3),(4,5,6)))					# 采用元组嵌套的形式传入参数
c = np.array([[1,2,3],(4,5,6)])					# 采用元组、列表混合的列表嵌套形式传入参数

a = np.array([[1,2,3],[4,5,6]], dtype=int32)	# 设置数组的dtype属性	

(2)数组常用属性

ndarray对象有一些常用的属性,如dtype、ndim、size、shape等。可以采用函数type()检测一个对象是否为ndarray对象。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print('数组的类型:', type(a))
print('数组的维数:', a.ndim)
print('数组的元素个数:', a.size)
print('数组的形状:', a.shape)
print('数组的数据类型:', a.dtype)

上述代码的输出内容如下:

数组的类型: <class 'numpy.ndarray'>
数组的维数: 2
数组的元素个数: 6
数组的形状: (2, 3)
数组的数据类型: int32

(3)数组的数据类型

Numpy库支持的数据类型如下表所示:

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

(4)内置特殊数组创建形式

Numpy内置了几个生成包含初始值的N维数组,能够高效的生成所需数组。如零一数组、对角数组等。

1.零一数组、对角数组

零一数组的生成函数为zeros()ones() ,传入的参数必须是一个包含两个元素的元组,其中第一个元素为数组的维数,第二个为数组的列数。

对角矩阵的生成函数为eye() ,传入的参数为int型数字。对角矩阵的定义如下:主对角线上的元素为一,其余元素为零的矩阵。对角矩阵的维数和列数相同。

生成的数组默认数据类型为浮点数,可以通过定义数组的dtype属性将其更改。

import numpy as np
print('零数组:\n', np.zeros((2,3)))      #生成一个初始值为0的,形状为2*3的零数组
print('一数组:\n', np.ones((2,3)))       #生成一个初始值为1的,形状为2*3的一数组
print('对角组:\n', np.eye(3))            #生成一个形状为3*3的,对角数组

上述代码的输出如下:

零数组:
 [[0. 0. 0.]
 [0. 0. 0.]]
一数组:
 [[1. 1. 1.]
 [1. 1. 1.]]
对角组:
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

此外,对角矩阵可以在一个原有的一维数组上进行创建。新建的数组的维数和列数与原数组的列数相同。

import numpy as np
a = np.array([1, 2, 3])
print(np.diag(a))

输出的结果如下:

[[1 0 0]
 [0 2 0]
 [0 0 3]]

2.序列数组

Numpy库内置的函数arange() 能够依据提供的数值范围创建数组。传入参数类似于Python的内置函数range(),不同的地方在于,arrage()函数设置的步长可以为浮点型

import numpy as np
print('生成0到10的序列函数:\n', np.arange(0,10))
print('生成0到10的,步长为2的序列函数:\n', np.arange(0,10,2))
print('生成0到10的,步长为2.5的序列函数:\n', np.arange(0,10,2.5))

输出如下所示:

生成010的序列函数:
 [0 1 2 3 4 5 6 7 8 9]
生成010的,步长为2的序列函数:
 [0 2 4 6 8]
生成010的,步长为2.5的序列函数:
 [0.  2.5 5.  7.5]

此外,内置函数 linspace() 能够用于生成等差数组。传入的前两个参数依旧表示数据范围的开始与结束,而第三个参数则表示为范围内的数字等分为几部分。参数endpoint 的值取True或False,表示是否将结束的数字纳入数列中。

import numpy as np
print('将0到10的数字五等份,包含数字10:\n', np.linspace(0,10,5))
print('将0到10的数字五等份,不包含数字10:\n', np.linspace(0,10,5,endpoint=False))

输出结果如下:

010的数字五等份,包含数字10[ 0.   2.5  5.   7.5 10. ]010的数字五等份,不包含数字10[0. 2. 4. 6. 8.]

3.随机数组

Numpy的随机数主要由numpy.random模块实现。模块内常用的函数包括:

  • 函数rand(): 根据给定维度生成 [0, 1) 之间的数据,包含0,不包含1
  • 函数randn(): 返回一组具有标准正态分布的数组
  • 函数randint(): 在给定的数据范围内生成指定数目的整数;传入参数为数据范围的始末值和数组大小
  • 函数random_sample:[0, 1) 区间内生成指定个数的随机浮点数
import numpy as np
print('0、1分布:\n', np.random.rand(2,3))
print('标准正态分布:\n', np.random.randn(3,2))
print('随机整数:\n', np.random.randint(2,10,5))
print('随机浮点数:\n', np.random.random(5))

输出内容如下:

01分布:
 [[0.87445382 0.09422451 0.06907788]
 [0.27529741 0.36810821 0.22623295]]
标准正态分布:
 [[-0.75812562 -0.26682828]
 [ 1.57646845 -1.08735943]
 [-0.30249788 -0.13160996]]
随机整数:
 [4 7 9 4 2]
随机浮点数:
 [0.11699514 0.98790709 0.85412832 0.75072901 0.06532423]

此外,在numpy.random模块还存在一个特殊的内置函数seed(),称为随机数种子

设置了随机数种子后能够使得随机数据可以被预测。当设置相同的seed,每次生成的随机数相同;如果不设置seed,则每次会生成不同的随机数。

import numpy as np
np.random.seed(2333)
a = np.random.rand(5)
np.random.seed(2)
b = np.random.rand(5)
np.random.seed(2333)
c = np.random.rand(5)

print('seed:2333\na\n', a)
print('seed:2\nb\n', b)
print('seed:2333\nc\n', c)

输出结果如下:

seed:2333
a
 [0.52977763 0.8944875  0.24233821 0.92696067 0.19186078]
seed:2
b
 [0.4359949  0.02592623 0.54966248 0.43532239 0.4203678 ]
seed:2333
c
 [0.52977763 0.8944875  0.24233821 0.92696067 0.19186078]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值