兩矩陣,直接點積運算之后抽取一行,與先從矩陣抽出一行再進行點積運算結果不同。
代碼:
X = np.random.randn(50, 1000)
Y = X[0]
W = np.random.randn(1000, 10)
A = X.dot(W)
B = Y.dot(W)
測驗:
B == A[0]
結果:
array([ True, False, False, False, False, False, False, False, False, False])
測驗:
Y.dot(W) - X.dot(W)[0]
結果:
array([ 0.00000000e+00, -6.66133815e-15, 2.22044605e-14, 1.06581410e-14,
8.88178420e-15, -2.30926389e-14, 2.84217094e-14, -3.28626015e-14,
-4.48530102e-14, 3.90798505e-14])
這個結果是否正確?是否能得到相同的結果?
環境:Windows10,Python3.7, NumPy1.17.4
謝謝。
uj5u.com熱心網友回復:
兄弟,我測驗了一下,你的結果不對啊,我用你的代碼得到的結果是這樣的,環境和你的一樣:[ True True True True True True True True True True]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
代碼:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import numpy as np
X = np.random.randn(5, 10)
print("X------",X)
Y = X[0]
print("Y------",Y)
W = np.random.randn(10, 10)
print("W------",W)
A = X.dot(W)
B = Y.dot(W)
# print("A----",A)
# print("B----",B)
# 測驗:
print(B == A[0])
# 結果:
# array([ True, False, False, False, False, False, False, False, False, False])
print("--"*20)
# 測驗:
print(Y.dot(W) - X.dot(W)[0])
# 結果:
# array([ 0.00000000e+00, -6.66133815e-15, 2.22044605e-14, 1.06581410e-14,
# 8.88178420e-15, -2.30926389e-14, 2.84217094e-14, -3.28626015e-14,
# -4.48530102e-14, 3.90798505e-14])
# 這個結果是否正確?是否能得到相同的結果?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105050.html
