import numpy as np
# Example 1: (2, 2, 3) @ (2, 3, 2) → (2, 2, 2)
a = np.array([1,2,3,4,5,6,7,8,9,10,11,12], dtype=np.float32).reshape(2, 2, 3, order='F')
b = np.array([1,2,3,4,5,6,7,8,9,10,11,12], dtype=np.float32).reshape(2, 3, 2, order='F')
result1 = np.matmul(a, b)
print("Example 1 Shape:", result1.shape)
print(result1)
print()
# Example 2: Broadcasting (3, 1, 2, 3) @ (1, 4, 3, 2) → (3, 4, 2, 2)
c = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
dtype=np.float32).reshape(3,1,2,3, order='F')
d = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
dtype=np.float32).reshape(1, 4, 3, 2, order='F')
result2 = np.matmul(c, d)
print("Example 2 Shape:", result2.shape)
print(result2)
aW1wb3J0IG51bXB5IGFzIG5wCgojIEV4YW1wbGUgMTogKDIsIDIsIDMpIEAgKDIsIDMsIDIpIOKGkiAoMiwgMiwgMikKYSA9IG5wLmFycmF5KFsxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMl0sIGR0eXBlPW5wLmZsb2F0MzIpLnJlc2hhcGUoMiwgMiwgMywgb3JkZXI9J0YnKQpiID0gbnAuYXJyYXkoWzEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXSwgZHR5cGU9bnAuZmxvYXQzMikucmVzaGFwZSgyLCAzLCAyLCBvcmRlcj0nRicpCgpyZXN1bHQxID0gbnAubWF0bXVsKGEsIGIpCnByaW50KCJFeGFtcGxlIDEgU2hhcGU6IiwgcmVzdWx0MS5zaGFwZSkKcHJpbnQocmVzdWx0MSkKcHJpbnQoKQoKIyBFeGFtcGxlIDI6IEJyb2FkY2FzdGluZyAoMywgMSwgMiwgMykgQCAoMSwgNCwgMywgMikg4oaSICgzLCA0LCAyLCAyKQpjID0gbnAuYXJyYXkoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMThdLCAKICAgICAgICAgICAgIGR0eXBlPW5wLmZsb2F0MzIpLnJlc2hhcGUoMywxLDIsMywgb3JkZXI9J0YnKQpkID0gbnAuYXJyYXkoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjRdLCAKICAgICAgICAgICAgIGR0eXBlPW5wLmZsb2F0MzIpLnJlc2hhcGUoMSwgNCwgMywgMiwgb3JkZXI9J0YnKQoKcmVzdWx0MiA9IG5wLm1hdG11bChjLCBkKQpwcmludCgiRXhhbXBsZSAyIFNoYXBlOiIsIHJlc3VsdDIuc2hhcGUpCnByaW50KHJlc3VsdDIpCg==