numpy.eye() 与 numpy.identity() 函数的用法

本文详细介绍了NumPy库中的eye和identity函数的使用方法,包括参数解释、返回值说明及示例代码,展示了如何利用这些函数生成特定的二维数组,如对角矩阵和单位矩阵,适用于深度学习中的one-hot编码等高级应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档:https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.eye.html#numpy.eye

1 numpy.eye()

numpy.eye(N, M=None, k=0, dtype=<type 'float'>)
Parameters:

N:int型,表示的是输出的行数

M:可选,int型,输出的列数,如果没有就默认为N

k:可选,int型,对角线的下标,默认为0表示的是主对角线,负数表示的是低对角,正数表示的是高对角。

dtype:可选,数据的类型,返回的数据的数据类型

Returns:

ndarray of shape (N,M):N*M的数组

一个所有元素都等于零的数组,除了第k条对角线,它的值等于1。

栗子1:普通的用法

import numpy as np
 
a=np.eye(3)
print(a)
 
a=np.eye(4,k=1)
print(a)
 
a=np.eye(4,k=-1)
print(a)
 
a=np.eye(4,k=-3)
print(a)


# result

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
[[0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]
 [0. 0. 0. 0.]]
[[0. 0. 0. 0.]
 [1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [1. 0. 0. 0.]]

栗子2:深度学习中的高级用法,将数组转成one-hot形式

该函数的用法非常的简单,但是在预制的代码中,这个函数的用法并非仅仅生成一个对角矩阵,而是通过其将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-hot数组。

# one-hot编码
import numpy as np
 
labels=np.array([[1],[2],[0],[1]])
print("labels的大小:",labels.shape,"\n")
 
#因为我们的类别是从0-2,所以这里是3个类
a=np.eye(3)[1]
print("如果对应的类别号是1,那么转成one-hot的形式",a,"\n")
 
a=np.eye(3)[2]
print("如果对应的类别号是2,那么转成one-hot的形式",a,"\n")
 
a=np.eye(3)[1,0]
print("1转成one-hot的数组的第一个数字是:",a,"\n")
 
#这里和上面的结果的区别,注意!!!
a=np.eye(3)[[1,2,0,1]]
print("如果对应的类别号是1,2,0,1,那么转成one-hot的形式\n",a)
 
res=np.eye(3)[labels.reshape(-1)]
print("labels转成one-hot形式的结果:\n",res,"\n")
print("labels转化成one-hot后的大小:",res.shape)


# result

labels的大小: (4, 1) 
 
如果对应的类别号是1,那么转成one-hot的形式 [0. 1. 0.] 
 
如果对应的类别号是2,那么转成one-hot的形式 [0. 0. 1.] 
 
1转成one-hot的数组的第一个数字是: 0.0 
 
如果对应的类别号是1,2,0,1,那么转成one-hot的形式
 [[0. 1. 0.]
 [0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]]
labels转成one-hot形式的结果:
 [[0. 1. 0.]
 [0. 0. 1.]
 [1. 0. 0.]
 [0. 1. 0.]] 
 
labels转化成one-hot后的大小: (4, 3)

2 numpy.identity()

这个函数和之前的区别在于,这个只能创建方阵,也就是N=M。

numpy.identity(n, dtype=None)
Parameters:

n:int型表示的是输出的矩阵的行数和列数都是n

dtype:表示的是输出的类型,默认是float

Returns:n*n的数组,主对角线为1,其余地方为0

栗子:

import numpy as np
 
a=np.identity(3)
print(a)

# result

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

参考:https://blog.csdn.net/m0_37393514/article/details/81455915

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值