我对 NumPy 中数组和向量的概念感到困惑,假设我们有一个如下所示的一维数组。从“形状”方法中,我可以看到尺寸。 (10,)
表示具有 10 个元素的 1 个维度。
a = np.arange(10)
print(a)
a.shape
[0 1 2 3 4 5 6 7 8 9]
(10,)
现在我知道了一个名为 np.newaxis
的方法,用于将数组转换为行向量。所以我想知道在 NumPy 中我们是否假设行或列向量始终具有二维? (我认为在线性代数中,向量可以存在于任何维度,或者当我们提到“维度”时,NumPy 和线性代数在概念上存在差异?)。由于向量是通过调用 np.newaxis
添加 1 维来转换的。
print(a[np.newaxis:])
print(a[np.newaxis,:].shape)
[0 1 2 3 4 5 6 7 8 9]
(1, 10)
最佳答案
请注意,DIMENSION 这个词在不同的上下文中可能有不同的含义。例如在线性代数中,(1, 1) 是二维空间中的向量,(1, 1, 1) 是三维空间中的向量,在编程语言中它们都是一维数组。三维向量的集合在线性代数中是矩阵,在编程语言中是二维数组。
就线性代数而言,形状 (10,) 是 1 个 10 维向量或 10 个标量值。形状(10,2)是2个10维向量或10个2维向量。
让我们考虑线性代数矩阵乘法公式:
AB(i,j) = sum(A[i,k] * B[k,j])
如果我们假设行向量是维度 (1, N) 的矩阵,列向量是维度 (N, 1) 的矩阵,则此公式对向量仍然有效。
NumPy 使用相同的方法。但 NumPy 不仅允许 2D 数组,还允许 1D、3D 等。这样的数组对于其他计算模型很有用。如果您对此感兴趣,可以阅读有关张量的更多信息。
您可以使用 .reshape(...)
方法重新排列 ndarray
的元素。当更改数组的形状时,所有元素都保留在原位,但元素的寻址会发生变化。
如果我们假设行向量和列向量是特殊对象,我们将被迫将计算规则复杂化,这是非常不切实际的。
关于python-3.x - 将一维数组转换为 Numpy 中的行或列向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59913283/