Numpy Matrix扩展名如下:

时间:2015-12-08 17:32:50

标签: python numpy matrix

我的问题在numpy的矩阵制作中有所讨论;

A=([[2, 3, 4, 2, 1, 3, 4, 1, 3, 2 ]])

在此矩阵中,最大值为4,如您所见。我想获得如下矩阵,这个矩阵有4列10行(10x4),因为我有10个观察

B=([[0, 1, 0, 0],
    [0, 0, 1, 0],
    [0, 0, 0, 1],
    [0, 1, 0, 0],
    [1, 0, 0, 0],
    [0, 0, 1, 0],
    [0, 1, 0, 1],
    [1, 0, 0, 0],
    [0, 0, 1, 0],
    [0, 1, 0, 0]])

B矩阵的第一行,第二列应为1,其他行元素应为0,因为A矩阵的第一个元素是2。类似地,第二行和第三列shold为1,其他行元素应该是因为A矩阵的secon元素是3,依此类推......

如何编写 Python (numpy)代码,它们将此B矩阵作为输出 这对我来说非常重要,请帮助....

2 个答案:

答案 0 :(得分:1)

看起来您只想将A与列表(或数组)[1,2,3,4]匹配,并标记相应的列

In [110]: A=np.array([2, 3, 4, 2, 1, 3, 4, 1, 3, 2 ])

使用广播制作2d真/假比赛数组

In [111]: (A[:,None]==np.arange(1,5))
Out[111]: 
array([[False,  True, False, False],
       [False, False,  True, False],
       [False, False, False,  True],
       [False,  True, False, False],
       [ True, False, False, False],
       [False, False,  True, False],
       [False, False, False,  True],
       [ True, False, False, False],
       [False, False,  True, False],
       [False,  True, False, False]], dtype=bool)

将T / F转换为1/0整数:

In [112]: (A[:,None]==np.arange(1,5)).astype(int)
Out[112]: 
array([[0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1],
       [0, 1, 0, 0],
       [1, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1],
       [1, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 1, 0, 0]])

答案 1 :(得分:0)

import numpy as np
A=[2, 3, 4, 2, 1, 3, 4, 1, 3, 2 ]
size=[len(A),np.max(A)]
B=np.zeros(size)
for i in range(len(A)):
    idx=A[i]-1
    B[i,idx]=1
print B