我的问题在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矩阵作为输出 这对我来说非常重要,请帮助....
答案 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