numpy 的一维向量如何参与计算

作者: , 共 618 字 , 共阅读 0

numpy 的一维向量:

a = np.array([1, 2, 3])
a.shape # (3,)

一维向量没有行列之分,它可以转置(a.T),但值不变。而且它参与到计算的方式很有意思:

b = a.reshape((3, 1))
c = a.reshape((1, 3))

a + b # shape: (3, 3)
b + a # shape: (3, 3)

a + c # shape: (1, 3)
c + a # shape: (3, 1)

np.dot(a, b) # shape: (1,)
np.dot(b, a) # error

np.dot(a, c) # error
np.dot(c, a) # shape: (1,)

结论:

  • 一维向量在广播运算时,是作为行向量的,需要时,将被复制多行。
  • 一维向量在参与矩阵乘法时,如果放在前面作为行向量,放在后面作为列向量。所以np.dot(a, a)是合法的,相当于向量内积。

其中第一条结合 numpy 矩阵取行取列都返回行向量,有时候会和预期不一样:

m = np.array(range(9)).reshape((3, 3))
c = m[:, 0] # 此处c为一维向量,而不是一个列。
a = np.array([1, 2, 3]).reshape((3, 1))
a + c # shape: (3, 3),其中 c 被当做一个行向量。

Q. E. D.

类似文章:
编程 » Python, numpy
今天写 Python 代码时遇到一个恶心的 bug ,花了好一会才定位和搞清楚。我的目标是寻找第一个非 NAN 的数的位置(其中 array 是一个 numpy 向量),很自然有下面实现:
编程 » pandas, numpy, Python, C++
首先任意定义一个结构,注意不要用 std::string 非平凡布局的变量,用 char[] 代替:
编程 » Excel
最近看到一个比较有趣的问题, Excel 中以下表达式代表什么含义:
编程 » C++
有两种方法,一种在线程的调用函数内部设置,还有一种是在外部对指定线程变量做设置。
爬升约 800 米(下降约 500 米,起点终点海拔不一样),路程约 12 公里;路好走。