我正在尋找關於乘法因子上的廣播規則和numpy.dot方法的一些說明。我創建了兩個形狀(2,)和(3,)的數組,它們可以通過添加一個新的軸(3,1形狀)相乘,但它不能通過np.dot方法,即使添加了一個新軸並轉動變成(3,1)形狀。下面是一些小測試。Numpy dot形狀(2,)(3,1)給出了錯誤,但乘法不是
x_1 = np.random.rand(2,)
print(x_1)
x_2 = np.random.rand(3,)
print(x_2)
> [ 0.48362051 0.55892736]
> [ 0.16988562 0.09078386 0.04844093]
x_8 = np.dot(x_1, x_2[:, np.newaxis])
> ValueError: shapes (2,) and (3,1) not aligned: 2 (dim 0) != 3 (dim 0)
x_9 = x_1 * x_2[:, np.newaxis]
print(x_9)
> [[ 0.47231067 0.30899592]
[ 0.17436521 0.11407352]
[ 0.01312074 0.00858387]]
x__7 = x_1[:, np.newaxis] * x_2[:, np.newaxis]
> ValueError: operands could not be broadcast together with shapes (2,1) (3,1)
我明白np.dot的(2,1)&(1,3)的作品,但爲什麼不(2,1)&(3,1),因爲廣播規則二說,兩個維度當它們中的一個是1時是兼容的。因此,如果它的一個維度是1,那麼np.dot應該工作,或者我理解了第二個規則是錯誤的?此外,爲什麼X_9工作(乘法)而不是x_8(np.dot),兩者都是相同的形狀。
「廣播」規則不適用於「點」。 – hpaulj
你對2個1d數組有什麼期待'dot'?或者2擴展到2d?內在產品? Outter? – hpaulj
@hpaulj我正在處理的等式δ= W f(h)試圖獲得內積。最終的標量值。所以我正在努力在np.dot方法上使用numpy乘法來更好地理解,並且我應該使用np.dot和numpy乘法。任何建議/經驗要知道嗎?並且,謝謝,在廣播文檔中沒有發現np.dot不適用於他們。 –