Numpy 1D数组:默认是行向量还是列向量?

3
在以下代码中,我创建了两个numpy数组。一个是1D数组,另一个是2D数组。
当我转置1D数组时,它保持不变。它没有从行矩阵变成列矩阵。 当我转置2D数组时,它从行矩阵变成了列矩阵
代码:
a = np.array([1,2,3,4,5])
print("a: ", a)
print("a.T: ", a.T)
b = np.array([[1,2,3,4,5]])
print("b: ", b)
print("b.T: ", b.T)

输出:

   a:  [1 2 3 4 5]
 a.T:  [1 2 3 4 5]
   b:  [[1 2 3 4 5]]
 b.T:  [[1]
        [2]
        [3]
        [4]
        [5]]

现在,我有一些问题:

  1. a = np.array([1,2,3,4,5]),这真的创建了一个行矩阵吗?

  2. print("a.T: ", a.T),它是否隐式地将a从行矩阵转换成列矩阵?还是它保持不变?

  3. b = np.array([[1,2,3,4,5]]),这真的创建了一个行矩阵吗?

  4. print("b.T: ", b.T),它是否将行矩阵转换为列矩阵?我的意思是,我是正确的吗?

  5. 或者,如果我只使用一个方括号创建一个numpy数组,根本没有任何问题或行或列矩阵吗?

另外,当执行点操作时,我得到以下结果:

代码:

print(b.dot(a))
print(b.dot(a.T))

输出:

[55]
[55]

但就我而言,dot()函数执行的是矩阵乘法的任务。

如果是这样的话,根据矩阵乘法规则,第一个矩阵的列数必须等于第二个矩阵的行数,那么其中一个案例不应该会出现错误吗?


1
你一直在使用“矩阵”这个术语,但是它们都不是矩阵,它们都是数组。 - user3483203
a 的形状为 (5,);b 的形状为 (1,5)。transpose 反转了形状 - 但不会添加维度。在使用 numpy 时,迟早你会想要放弃“矩阵/向量”术语,而是专注于形状。 - hpaulj
1个回答

5
  1. 不是,在Numpy中这不是一个行矩阵,因为它只有一个维度(5,)

  2. 不是,因为a不是一个行矩阵(见1)

  3. 是的,如果您所说的“行矩阵”是指“只有一行和N列的二维数组”

  4. 是的,如果您所说的“列矩阵”是指“有N行和一列的二维数组”

  5. 只使用一组方括号,您根本没有创建一个“矩阵”(即:二维数组),而只是一个一维数组

  6. (?) np.dot的文档清楚地表明,它仅在某些特殊情况下是矩阵乘法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接