【问题标题】:How to keep one-column slice of a matrix as column vector? [duplicate]如何将矩阵的一列切片保留为列向量? [复制]
【发布时间】:2015-05-25 22:42:31
【问题描述】:

当我从矩阵中提取一列时,如何将其保留为列向量?在下面的示例中,a[:,0] 被视为行向量。

a = np.array([[1,2,3],[1,2,3]])
a[:,0]
a[:,0] + np.array([[1],[2]]) # I expect a 2x1 vector, not a 2x2 matrix

我知道我可以使用a[:,0][:, np.newaxis]a[:,0] 转换为所需的维度。但是,我想知道是否有更通用和 Pythonic 的解决方案将向量保持为列向量(因为在大多数论文中,向量都是列向量)。

【问题讨论】:

  • @all_m 正如我所说,我知道如何解决转换为列向量的技术问题。我想我想知道将 Python 向量保留为列的“良好做法”是什么,因为在论文中向量始终是一列。
  • 一维 numpy ndarray 实际上只是一个一维数组 - 它不是第二维长度为 1 的“行”或“列”。如果你真的想要一个以这种方式运行的类,您可以使用np.matrix(查看我链接到的问题中的第二个答案)。但是,使用np.matrixis discouraged for a number of reasons
  • 对于同一个问题,除了标记为这个重复的问题外,还有更多问题,例如stackoverflow.com/questions/24607419/…, stackoverflow.com/questions/15165170/…
  • a[:,[0]] 保留第二维。但是添加 [:,newaxis]` 完全是“pythonic”,或者更确切地说,使用numpy 的标准功能。重塑数组以满足您的需求并没有错。这种操作很便宜。

标签: python numpy matrix vector


【解决方案1】:

首先,从该切片中获取一维向量是一个特征;习惯就好了。

但是,如果您真的不想要该功能,您可以使用矩阵对象。

a = np.matrix([[1,2,3],[1,2,3]])
a[:,0]   #is 2 x 1

【讨论】:

  • 您能解释一下它是如何成为一个功能的吗? (我真的想以 Python 的方式思考)。我发现当我使用 1D 数组和 2D 数组的点积时,是否将其转置为 1D 数组并不重要。我发现这种缺乏明确的维度很难理解。
  • @Heisenberg 主要原因是为了一致性。 “行”和“列”的概念(即(n, 1)(1, n))仅对(至少)二维数组才真正有意义。为什么 numpy 应该强制所有数组都是二维的?为什么还要停留在二维? np.ndarray 一致地对待 n 维数组,而不是任意插入额外的轴以保持它们是二维的。
  • 那么当你使用点积时,比如说统计中经常出现的$$x' \Sigma x$$,你如何为一维x写出清晰的代码?
  • @Heisenberg 在这种情况下,您可以简单地使用x.dot(Sigma).dot(x)a.dot(b)a 的最后一个轴和 b 的倒数第二个轴的和积。
猜你喜欢
  • 2023-01-26
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多