一维元组转换为二维numpy数组

3

将一个元组转换为具有以下条件的 Numpy 矩阵:

  • 数组的形状应为 len(tuple) x len(tuple),即方阵。
  • 在由 (元组中元素的索引,元组中元素的值) 指定的位置的数组元素应为 1。

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

# 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个回答

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.]]

更加直观,谢谢。 - james

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.]])

我喜欢这个,更加简洁。 - Ke Yang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接