Numpy数组与矩阵(一)

Numpy数组与矩阵(一)

1 ndarray对象

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

​ ndarray的组成部分有:

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

​ 创建一个ndarray只需要调用Numpy的array函数就可以了,它的语法结构如下所示:

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

​ 以下进行参数说明:

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

​ 下面我们给出几个实例:

# 导入Numpy库,并给它起一个别名:np
import numpy as np
# 示例一
a = np.array([1, 2, 3, 4, 5])
# 示例二
data = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
b = np.array(data)

​ 当我们需要查看数组的维度时,直接调用ndim属性就可以了,具体我们可以使用变量名.ndim来查看。

2 数据类型

​ NumPy支持的数据类型比Python内置的类型要多很多,其中的不分类型也是对应于Python的内置类型而精心设计的。

名 称描 述
bool_布尔数据类型(True或False)
int_默认的整数类型(就像C语言中long,int32或int64)
intc和C语言中的int一样,一般是int32 或int64
intp用于索引的整数类型(一般情况下仍然是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位浮点数(实数部分和虚数部分)

​ 以下我将会举出几个实例:

import numpy as np
c = np.array([1, 2, 3, 4, 5])
print(c)
c.dtype

在这里插入图片描述

​ 运行以上程序,我们知道数组c中各元素的数据类型是int32。

d = np.array([-11.7, 41.55, 32.6, -19.88, 32.11, -9.5])
print(d)
d.dtype

在这里插入图片描述

3 数组属性

​ Numpy的数组中比较重要的ndarray对象属性如下表所示。

属 性说 明
ndarray.ndim秩,也就是轴的数量或者维度的数量
ndarray.shape数组的维度,对于矩阵,n行m列
ndarray.size数组元素的总个数,相当于shape中n*m的值
ndarray.dtypendarray对象的元素类型
ndarray.itemsizendarray对象中每个元素的大小,以字节为单位
ndarray.flagsndarray对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray元素的虚部
ndarray.data包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性

​ 我们通过实例来说明数组的这些特性。我们首先需要创建数组,然后直接调用数组的这些属性。

a = np.arange(25, dtype = np.float_).reshape(5, 5)
b = np.array([1, 2, 3, 4, 5])
print(a)
print(b)

在这里插入图片描述

​ 我们创建了a,b两个不同维度的数组,之后我们调用属性查看这两个数组之间的差别。

print('数组a的属性:')
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)

在这里插入图片描述

​ 以上就是数组a的所有属性显示。

print('数组b的属性:')
print(b.ndim)
print(b.shape)
print(b.size)
print(b.dtype)
print(b.itemsize)

在这里插入图片描述

​ 以上就是数组b的所有属性显示。

4 创建数组

​ 以下给出数组创建函数:

函 数描 述
array将输入的数据(列表、元组、数组或其他序列类型)转换成ndarray
asarray将输入转换为ndarray,如果已经是ndarray,则不用复制
arange直接返回ndarray而不是列表
ones,ones_likeones表示生成一个由1组成的数组;ones_like表示返回与指定数组具有相同形状和数据类型的数组,并且数组中的值都是1
zeros,zeros_likezeros表示生成一个由1组成的数组;zeros_like表示返回与指定数组具有相同形状和数据类型的数组,并且数组中的值都是0
empty,empty_like通过分配新内存来创建新数组,但不要使用1和0之类的来填充数组
full,full_like返回与给定数组具有相同形状和类型的数组,并且数组中元素的值是fill_value的值
eye,identity创建一个正方形N*N单位矩阵(对角线上的值为1,其余都为0)

4.1 零元素数组

​ 我们创建全部都是由0来填充的数组,要使用**zeros函数**,下面将会给出具体创建函数以及参数说明。

numpy.zeros(shape, dtype = float, order = 'C')

​ 参数说明如下:

参 数描 述
shape数组形状
dtype数据类型,可选
order‘C’用于C的行数组,或者‘F’用于FORTRAN的列数组

​ 实例说明:

import numpy as np
a = np.zeros((5,2))
print(a)

在这里插入图片描述

4.2 一元素数组

​ 利用==ones函数==来实现全部由1来填充元素的数组,具体语法结构以及参数说明如下述:

numpy.ones(shape, dtype = None, order = 'C')

​ 至于以上提到的参数,和零元素数组中的参数说明相同,在此不再概述。

​ 下面我们将举出实例进行说明:

import numpy as np
b = np.ones((5, 5))
print(b)
print(b.dtype)

在这里插入图片描述

4.3 arange函数

​ 在Numpy中,我们还可以通过**arange函数**来创建数组,并且用arange函数创建出来的是ndarray对象。具体的函数使用以及参数说明如下述:

numpy.arange(start, stop, step, dtype)

​ 参数说明如下:

参 数描 述
start是数组的起始值,默认为0
stop终止值(且不包含,也就是到这个数或者超过这个数,就停止)
step步长,默认情况下为1
dtype返回ndarray的数据类型,如果没有提供,就会使用输入数据的类型

​ 实例演示:

import numpy as np
arr1 = np.arange(0, 10, 2)
arr2 = np.arange(10, -10, -4)
arr3 = np.arange(1, 5, 2, dtype = float)
arr4 = np.arange(10)
print('arr1 = ', arr1)
print('arr2 = ', arr2)
print('arr3 = ', arr3)
print('arr4 = ', arr4)

在这里插入图片描述

4.4 等差数列数组

​ Numpy中的**linspace函数**是用来创建一个一维数组,该数组是由一个等差数列构成的。具体语法结构如下所述:

nmupy.linspace(start, stop, num = , endpoint = True, retstep = Fasle, dytpe = None)

​ 具体参数说明如下:

参 数描 述
start序列的起始值
stop序列的终止值,如果endpoint是True,该值将会包含在数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为True时,数列中包含stop值;反之,则不包括。默认为True
retstep如果是True,生成的数组中会显示间距,反之不会显示
dtypendarray的数据类型

​ 实例说明:

import numpy as np
a = np.linspace(0, 5, 6)
b = np.linspace(0, 5, 6, endpoint = False)
print("a = ", a)
print("b = ", b)

在这里插入图片描述

4.5 等比数列数组

​ Numpy中的**logspace函数**可以用来创建一个等比数列,语法格式如下:

nmupy.logspace(start, stop, num = , endpoint = True, base = , dtype = None)

​ 参数具体说明如下:

参 数描 述
start序列的起始值基于base**start
stop序列的终止值j基于base**stop,如果endpoint是True,该值将会包含在数列中
num要生成的等步长的样本数量,默认为50
endpoint该值为True时,数列中包含stop值;反之,则不包括。默认为True
base对数log的底数
dtypendarray的数据类型

​ 具体实例说明:

import numpy as np
a = np.logspace(1, 10, 10 ,base = 2)
print(a)

在这里插入图片描述

5 数据索引与切片

​ ndarray对象可以通过索引过着切片进行访问和修改,Numpy切片语法和Python列表切片的方法相同。下面我我将为大家介绍数组的索引与切片。

5.1 索引

​ 我们将会了解如何通过索引和切片来选择元素,以此来获得其中的值。数组的索引总是使用“[]”来索引数组的元素,以便这些元素可以被单独引用,用于不同的用途,下面我们将通过案例来说明如何进行索引操作。

import numpy as np
a = np.random.randn(6)
print("a = ", a)
print("a[2] = ", a[2])
print("a[-1] = ", a[-1])

在这里插入图片描述

​ 依据上面的例子,我们可以看到,在一维数组中,我们可以通过中括号指定索引第i个值(从0开始计数)。我们的例子中a[2],输出的是第三个数。

​ 当然,我们也可以从后向前索引,最后一个元素的索引是-1,像例子中a[-1],输出的就是最后一个数。

print("a[[1,4]] = ", a[[1,4]])

在这里插入图片描述

​ 如果我们需要选择多各项,可以在方括号中传递索引数组,就比如我们需要第2个和第5个数字,我们就可以使用a[[1, 4]],来达到获取数组中的两个数据。

​ 当然,我们还可以定义一个二维数组,二维数组被表示成由行和列组成的矩形数组,由两个轴来定义,其中轴0表示行,轴1表示列。我们要是想通过索引来表示一个值,那么我们需要输入这个数字的行、列索引,行索引在前,列索引在后。具体方法是:数组名[行索引,列索引]

​ 具体实例如下:

import numpy as np
b = np.random.randn(4, 4)
print("b = ", b)
print("b[3, 3] = ", b[3, 3])

在这里插入图片描述

5.2 切片

​ 切片在Python中的应用十分重要。切片的定义是在一个数组中,我们通过提取其中的一部分元素来形成一个新的数组。当使用Python列表对数组进行切片时,我们的得到数组是一个副本。为了获取某个数组的一个切片,我们通过以下方式:

arrays_name[start:stop:step]

​ 上述方法表示,从索引start开始到索引stop(不包含),之间的步长是step。默认情况下,会分别设置为:start = 0stop = 维度的大小step = 1

​ 下面我们通过实例说明:

import numpy as np
a = np.arange(10)
print('a = ', a)
print('a[0:5] =', a[0: 5])
print('a[1:7:2]', a[1:7:2])

在这里插入图片描述

​ 对于二维数组,切片也同样适用,不同的是,行和列需要分别定义。示例如下:

import numpy as np
a = np.random.randn(24).reshape(6, 4)
print('a = ')
print(a)
print('获取数组a的第三行数据:')
print(a[2, :])
print('获取数组a的第一列数据:')
print(a[:, 0])

在这里插入图片描述

​ 对于二维数组还有很多有趣的操作,感兴趣的话,可以自己动手自我尝试一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋刀鱼的知更鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值