假设我有一个矩阵3x3,其值从0到3
[[1,0,0],
[0,3,0],
[0,0,2]]
我需要将其转换为具有0或1个值的1x27矩阵,因此如果值大于1则将为1,否则为零
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 1. 0.]
到目前为止,我已经尝试过了,但这是错误的:
def convert(Matr):
empty = np.zeros(Matr.shape[0]*Matr.shape[0]**2)
for i in range(Matr.shape[0]):
for j in range(Matr.shape[1]):
if Matr[i,j] != 0:
empty[i][((j+1)* Matr[i,j])-1] = 1
答案 0 :(得分:1)
您可以执行以下操作:
import numpy as np
a = np.array([[1, 0, 0],
[0, 3, 0],
[0, 0, 2]])
encoding = np.vstack((np.zeros((1, 3)), np.eye(3)))
result = encoding[a.ravel()].flatten()
print(result)
输出
[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 1. 0.]
变量编码是一个数组,其中每一行对应一个代码,例如:
[[0. 0. 0.]
[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
一旦创建了编码,就会用encoding[a.ravel()]
遍历每一行,为每个值获取编码。