Dalam NumPy, a tatasusunan satu dimensi boleh diwakili dalam dua cara: sebagai bentuk (R, 1) (senarai nombor) atau sebagai bentuk (R,) (senarai senarai). Kedua-dua bentuk ini mewakili data asas yang sama, tetapi ia mempunyai implikasi yang berbeza untuk pendaraban matriks.
Apabila anda mendarab dua matriks, bentuknya mestilah serasi. Jika satu matriks mempunyai bentuk (R, 1) dan matriks lain mempunyai bentuk (R,), NumPy akan menimbulkan ralat kerana bentuk tidak sejajar. Ini kerana (R, 1) ialah bentuk dua dimensi, manakala (R,) ialah bentuk satu dimensi.
Untuk membetulkan ralat ini, anda boleh membentuk semula salah satu matriks secara eksplisit. Contohnya:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0].reshape((M.shape[0], 1)), ones)
Dalam contoh ini, kami membentuk semula lajur pertama M (bentuk (R,)) kepada bentuk (R, 1) menggunakan kaedah reshape(). Ini menjadikan bentuk dua matriks serasi dan pendaraban boleh dilakukan dengan jayanya.
Ya, terdapat cara yang lebih baik untuk melakukan contoh di atas tanpa membentuk semula secara eksplisit. Satu cara ialah menggunakan kaedah sum() dengan hujah paksi. Contohnya:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0], ones) + M[:,1:]
Dalam contoh ini, kami menggunakan kaedah sum() untuk menjumlahkan lajur pertama M dengan lajur yang tinggal. Ini memberikan kita matriks dengan bentuk yang sama seperti M. Kemudian kita boleh melakukan pendaraban tanpa sebarang ralat.
Cara lain untuk melakukan contoh di atas tanpa membentuk semula secara eksplisit ialah menggunakan fungsi broadcast(). Contohnya:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot( np.broadcast_to(M[:,0], M.shape), ones)
Dalam contoh ini, kami menggunakan fungsi broadcast() untuk menyiarkan lajur pertama M kepada bentuk M. Ini menjadikan bentuk dua matriks serasi, dan pendaraban boleh dilakukan dengan jayanya.
Atas ialah kandungan terperinci Apakah Perbezaan Antara Bentuk NumPy (R, 1) dan (R,) dan Bagaimana Isu Pendaraban Matriks Boleh Diselesaikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!