簡體   English   中英

點積為(x)和(x,y)的形狀

[英]Dot product with shapes (x) and (x, y)

我真的對numpy陌生,因此在理解點積時遇到了一些麻煩。

我有這段簡單的代碼:

import numpy as np

A = np.ones((5))
B = np.ones((5,10))

A.dot(B)
# array([ 5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.,  5.])

A.dot(B).shape
# (10,)

我不明白這段代碼中發生了什么。 我有點困惑,因為(10,)的形狀似乎不是列向量,因為轉置是相同的。

A正在廣播嗎? 我認為應該將A廣播為(5,5)的形狀,因此可以將其乘以B並返回一個形狀為(5,10)的數組。 我怎么了?

Numpy在1d數組(形狀為(N,)東西)和2d數組(矩陣)具有一列(形狀(N, 1) )或一行(形狀(1, N)又稱為列或行(1, N)之間產生差異。向量。

>>> a = np.ones((5, 1))
>>> B = np.ones((5, 5))
>>> B.dot(a)
array([[ 5.],
       [ 5.],
       [ 5.],
       [ 5.],
       [ 5.]])

或用numpy 1.10取消安裝python 3.5:

>>> a = np.ones((5, 1))
>>> B = np.ones((5, 5))
>>> B @ a
array([[ 5.],
       [ 5.],
       [ 5.],
       [ 5.],
       [ 5.]])

如果具有一np.newaxis數組,則可以使用np.newaxis使其成為行或列向量:

>>> a = np.ones(5)
>>> B = np.ones((5, 5))
>>> B @ a[:, np.newaxis]
array([[ 5.],
       [ 5.],
       [ 5.],
       [ 5.],
       [ 5.]])

新的行和列:

>>> x = np.arange(5)
>>> B = x[:, np.newaxis] @ x[np.newaxis, :]
>>> B
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]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM