构建设计矩阵python

构建设计矩阵python,python,numpy,patsy,Python,Numpy,Patsy,假设我有一个RxC。这意味着有R行和C列。我想要一个矩阵,X,维数为RC×(R+C)− 2) 包含R− 1行的“主要效果” 和C− 1列的“主效果”。例如,如果您有R=C=2(R=[0,1],C=[0,1])且仅具有主效果,则有多种方法可以参数化设计矩阵(X),但下面是一种方法: 1 0 0 1 1 0 0 0 注意,这是4x2=rcx(R+C-2),您省略了每行的一级和每列的一级 在Python中,对于R和C的任何值,即R=3,C=4([01 2]和[01 2 3]),我如何才能做到这一点?

假设我有一个RxC。这意味着有R行和C列。我想要一个矩阵,X,维数为RC×(R+C)− 2) 包含R− 1行的“主要效果” 和C− 1列的“主效果”。例如,如果您有R=C=2(R=[0,1],C=[0,1])且仅具有主效果,则有多种方法可以参数化设计矩阵(X),但下面是一种方法:

1 0
0 1
1 0
0 0
注意,这是4x2=rcx(R+C-2),您省略了每行的一级和每列的一级


在Python中,对于R和C的任何值,即R=3,C=4([01 2]和[01 2 3]),我如何才能做到这一点?我只有R和C的值,但我可以使用它们来构造数组,使用
np.arange(R)
np.arange(C)
以下应该可以:

R = 3
C = 2

ir = np.zeros((R, C))
ir[0, :] = 1
ir = ir.ravel()

mat = []
for i in range(R):
    mat.append(ir)
    ir = np.roll(ir, C)

ic = np.zeros((R, C))
ic[:, 0] = 1
ic = ic.ravel()

for i in range(C):
    mat.append(ic)
    ic = np.roll(ic, R)

mat = np.asarray(mat).T
结果是:

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

谢谢大家的帮助

使用LabelBinarizer或一个热编码创建设计矩阵

由于他的所有标签都在相似的列中,我们可以使用一个sklearns预处理包,该包具有LabelBinarizer/一个热编码,将同一列中的标签转换为多个列,并在发生标签的索引处放置1

范例 NA
PA
PD
NA

在LabelBinarizer之后
NA-PA-PD
1 0 0
0110
01

1 0 0

你能解释一下
R=C=2
是如何给出矩阵/数组的吗?你可能想从什么是列联表开始,或者至少从一个链接开始。我们是程序员(不管怎么说,我们中的一些人)而不是系统工程师。很好,编辑了一篇文章,例如,
R=3,C=4
的预期输出是什么?我不知道如何从维基百科的链接中获得“主要效果”,特别是不仅仅基于行数和列数。如果您只是想在以后将值放入一个空数组,您可以创建
np.empty((R,C,R+C-2))
如何
np.zero((R*C,R+C-2))
?OP可能还想看看,你能详细说明你的答案吗?例如,您应该提供一个示例,说明这些工具如何帮助解决问题,或者至少提供指向进一步文档的链接。