一维元组到二维numpy数组

时间:2019-07-12 02:08:17

标签: python-3.x numpy

在以下条件下将元组转换为Numpy矩阵:

  • 数组的形状应为len(tuple) x len(tuple),即正方形矩阵。
  • (index of the element in the tuple, the value of the element in the tuple)指定的位置的数组中的元素应该是一个。

例如,我有一个随机元组,如下所示:

# index means row ,value means col
(2,0,1)

我使用两个循环将这个元组更改为Numpy数组:

def get_np_represent(result):
    two_D = []
    for row in range(len(result)):
        one_D = []
        for col in range(len(result)):
            if result[row] == col:
                one_D.append(1)
            else:
                one_D.append(0)
        two_D.append(one_D)
    return np.array(two_D)

输出:

array([[0, 0, 1],
       [1, 0, 0],
       [0, 1, 0]])

但是我有10,000,000个这样的元组,有没有更快的方法?

2 个答案:

答案 0 :(得分:3)

像这样?操纵矩阵比for循环要快得多。

import numpy as np

t = (2, 0, 1)
x = np.zeros([len(t),len(t)])

for i,v in enumerate(t):
    x[i, v] = 1

print(x)

输出:

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

答案 1 :(得分:3)

例如(从Ke设置)

t = (2, 0, 1)
x = np.zeros([len(t),len(t)])
x[np.arange(len(x)),t]=1
x
Out[145]: 
array([[0., 0., 1.],
       [1., 0., 0.],
       [0., 1., 0.]])