Numpy 中的乘法

0 一维 array 对象

np中的一维向量有个特殊的用法,即将行或列设为 None,来进行转换。

a = np.array(range(5)) # np.arange(5)
a.shape
  Out: (5,) # 实际是行向量,注意表示方式的不同。
a[None,:].shape
  Out: (1,5) # 1 x 5 行向量
a[:,None].shape
  Out: (5,1) # 5 x 1 列向量

进一步理解上述操作。

a = a[None,:]
a.shape
out: (1,5)
a = a[None,:]
a.shape
out: (1,1,5)

0-1 理解 Numpy 中的 Shape

The meaning of shapes in Numpy

The best way to think about NumPy arrays is that they consist of two parts, a data buffer which is just a block of raw elements, and a view which describes how to interpret the data buffer.

理解 Numpy 中的 shape 的方法:
Numpy 中用两部分来表示数组形状:数据本身和形状描述。
具体解释可以看原文。

0-2 Numpy 中的 (R,)

是自由变量吧?即可以是行向量,也可以是列向量。证据:转置。

a = np.array(range(3)) # np.arange(3)
a is a.T
out: False

b = a.T
a[0] = 1
b
out: [1,1,2]

a.shape
out: (3,)
a.T.shape
out: (3,)

但实际上,Numpy 把 (R,) 当做行向量来理解。 将一个 (5,) 向量和一个 (3,5) 的二维矩阵相乘会出错(对也不对,没有深入理解。见下一小节的解释。):

a = np.arange(5)
b = np.reshape(np.arange(15),(3,5))
np.dot(a,b)
ValueError: shapes (5,) and (3,5) not aligned: 5 (dim 0) != 3 (dim 0)

0-3 纠错和补充

numpy 中的 broadcasting(广播)机制 一文中讲解了 广播 的机制,并解释了一维数组的行为。

一维数组置于矩阵乘法的左部,被视为一个行向量;
一维数组置于矩阵乘法的右部,被视为一个列向量;
矩阵乘法运算结束得到的向量仍是一维数组。

试验了下,确实如此:

a = np.arange(5)
b = np.reshape(np.arange(15),(3,5))
np.dot(b,a).shape
out: (3,)

1 向量的表示方法

(5,) 表示的是一个 1 x 5 的 向量。

a = np.array(range(5)) # np.arange(5)
  Out[1]: array([0, 1, 2, 3, 4])

a.shape
  Out[2]: (5,)

2 向量和矩阵的乘积

(5,) 和 (5,3) 的矩阵是可以直接用 np.dot() 相乘的(矢量乘法),得到一个 1 x 3 的向量。

b = np.reshape(np.array(range(15)),(5,3))
  Out[3]: 
  array([[ 0,  1,  2],
         [ 3,  4,  5],
         [ 6,  7,  8],
         [ 9, 10, 11],
         [12, 13, 14]])

np.dot(a,b)
  Out[4]: array([ 90, 100, 110])

但不能直接相乘,会提示维度不对应,无法进行广播。此时,python 是将 a 当做行向量的。

a * b
  ValueError: operands could not be broadcast together with shapes (5,) (5,3) 
a * b.T
out: array([[ 0,  1,  2,  3,  4],
             [ 5,  6,  7,  8,  9],
             [10, 11, 12, 13, 14]])

也可以强行将 a 转换为一个 1 x 5 的行向量,再进行乘法。

a = a[None,:] # 1:5 行向量 
np.dot(a,b)
  Out[4]: array([ 90, 100, 110])

3 向量和向量的乘法

3-1 对应元素相乘

c = a
a * c
  Out[5]: array([ 0,  1,  4,  9, 16])

3-2 点乘

np.dot(a,c)
  Out[6]: 30

3-3 叉乘

a(5,) 和 c(5,) 的叉乘需要将第二个变为列向量,c[:,None]。

a * c[:,None] # np.outer(a,c)
Out[7]: array([[ 0,  0,  0,  0,  0],
               [ 0,  1,  2,  3,  4],
               [ 0,  2,  4,  6,  8],
               [ 0,  3,  6,  9, 12],
               [ 0,  4,  8, 12, 16]])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容