dot
คือการคูณเมทริกซ์ แต่*
ทำอย่างอื่น
เรามีสองอาร์เรย์:
X
, รูปร่าง (97,2)
y
, รูปร่าง (2,1)
ด้วยอาร์เรย์ Numpy การดำเนินการ
X * y
เป็นองค์ประกอบที่ชาญฉลาด แต่ค่าหนึ่งหรือทั้งสองค่าสามารถขยายได้ในมิติเดียวหรือมากกว่าเพื่อให้เข้ากันได้ การดำเนินการนี้เรียกว่าการกระจายเสียง ขนาดที่มีขนาด 1 หรือที่ขาดหายไปสามารถใช้ในการแพร่ภาพได้
ในตัวอย่างด้านบนมิติข้อมูลเข้ากันไม่ได้เนื่องจาก:
97 2
2 1
มีตัวเลขที่ขัดแย้งกันในมิติแรก (97 และ 2) ที่นี่ นั่นคือสิ่งที่ ValueError ข้างต้นบ่นเกี่ยวกับ มิติที่สองก็โอเคเนื่องจากหมายเลข 1 ไม่ขัดแย้งกับสิ่งใด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกฎการออกอากาศ: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(โปรดทราบว่าถ้าX
และy
เป็นประเภทnumpy.matrix
คุณสามารถใช้เครื่องหมายดอกจันเป็นการคูณเมทริกซ์ได้คำแนะนำของฉันคือหลีกเลี่ยงnumpy.matrix
มันมีแนวโน้มที่จะซับซ้อนมากกว่าทำให้สิ่งต่างๆง่ายขึ้น)
อาร์เรย์ของคุณควรจะใช้ได้ด้วยnumpy.dot
; หากคุณได้รับข้อผิดพลาดnumpy.dot
คุณต้องมีข้อบกพร่องอื่น ๆ หากรูปทรงไม่ถูกต้องnumpy.dot
คุณจะได้รับข้อยกเว้นอื่น:
ValueError: matrices are not aligned
หากคุณยังคงพบข้อผิดพลาดนี้โปรดโพสต์ตัวอย่างปัญหาเล็กน้อย ตัวอย่างการคูณด้วยอาร์เรย์ที่มีรูปร่างเหมือนของคุณประสบความสำเร็จ:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
ไม่ควรทำงาน (และไม่ได้) แต่np.dot(X,y)
และX.dot(y))
ควรจะทำงาน (และสำหรับฉันที่พวกเขาทำ)