Rumah > pembangunan bahagian belakang > Tutorial Python > Apakah Perbezaan Antara Bentuk NumPy (R, 1) dan (R,) dan Bagaimana Isu Pendaraban Matriks Boleh Diselesaikan?

Apakah Perbezaan Antara Bentuk NumPy (R, 1) dan (R,) dan Bagaimana Isu Pendaraban Matriks Boleh Diselesaikan?

Susan Sarandon
Lepaskan: 2024-12-04 14:13:11
asal
341 orang telah melayarinya

What's the Difference Between NumPy's (R, 1) and (R,) Shapes, and How Can Matrix Multiplication Issues Be Resolved?

Apakah perbezaan antara bentuk (R, 1) dan (R,) dalam NumPy?

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)
Salin selepas log masuk

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.

Adakah terdapat cara yang lebih baik untuk melakukan contoh di atas tanpa membentuk semula secara eksplisit?

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:]
Salin selepas log masuk

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)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan