我有一个用numpy.random.uniform
初始化的矩阵,如下所示:
W = np.random.uniform(-1, 1, (V,N))
在我的例子中,V = 10000
和N = 50
,x
是一个正整数
当我把W乘以一个热向量x_vec
的维vx1,比如W.T.dot(x_vec)
,我得到一个形状为(50,1)的列向量。当我试图通过索引W得到相同的向量时,如W[x].T
或W[x,:].T
,我得到了shape(50,)。你知道吗
有人能解释一下为什么这两个表达式返回不同的形状,以及是否有可能用索引方法返回(50,1)矩阵(向量)。形状(50,)的向量是有问题的,因为当我将它与其他矩阵相乘时,它的行为与(50,1)向量不同,但是我想使用索引来加快速度。你知道吗
*如果这个问题应该放在交叉验证而不是堆栈交换的地方,请提前道歉
它们是不同的操作。矩阵(在数学意义上)乘以矩阵给出的矩阵,你的一些矩阵恰好有宽度1。 使用整型标量进行索引会吃掉要索引到的维度。一旦降到一个维度,
.T
就什么都不做了,因为它没有足够的轴来洗牌。你知道吗如果您想从(50,)到(50,1)形状,那么这个方法就是用
None
索引,就像v[:, None]
。在您的情况下,至少有两个单行选项:第二行选项通过请求长度为1的子范围来保留
W
的第一维度。由于@hpaulj指出了这一点,第一个选项可以压缩为一个索引操作,这提供了可以说是最可读的选项:第一个索引(标量整数
x
)消耗W
的第一个维度,第二个维度(不受:
影响)成为第一个维度,None
在右侧创建一个新维度。你知道吗相关问题 更多 >
编程相关推荐