Numpy矩阵扩展如下:

2024-04-25 03:34:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是对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,因为矩阵的第一个元素是2。同样地,第二行和第三列应该是1,其他行元素应该是,因为矩阵的第二行元素是3,依此类推。。。你知道吗

如何编写Python(numpy)代码,将这个B矩阵作为输出 这对我来说非常重要,请帮我。。。。你知道吗


Tags: 代码numpy元素矩阵感兴趣
2条回答

看起来您只想将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]])
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

相关问题 更多 >