使用布尔值将矩阵3x3转换为1x27

时间:2019-02-02 13:55:52

标签: python numpy

假设我有一个矩阵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

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()]遍历每一行,为每个值获取编码。