Saya menggunakan numpy. Saya memiliki matriks dengan 1 kolom dan baris N dan saya ingin mendapatkan array dengan elemen N.
Misalnya, jika ada M = matrix([[1], [2], [3], [4]])
, saya ingin mendapatkannya A = array([1,2,3,4])
.
Untuk mencapainya, saya menggunakan A = np.array(M.T)[0]
. Adakah yang tahu cara yang lebih elegan untuk mendapatkan hasil yang sama?
Terima kasih!
Jawaban:
Jika Anda ingin sesuatu yang sedikit lebih mudah dibaca, Anda dapat melakukan ini:
Setara, Anda juga bisa melakukannya:,
A = np.asarray(M).reshape(-1)
tapi itu agak kurang mudah dibaca.sumber
numpy.matrix
adalah sedikit masalah yang diperdebatkan, tetapi para pengembang numpy sangat setuju dengan Anda bahwa memiliki keduanya adalah unpythonic dan menjengkelkan karena sejumlah alasan. Namun, jumlah kode lama yang tidak terawat "in the wild" yang digunakanmatrix
membuatnya sulit untuk sepenuhnya menghapusnya.sklearn
). Bahkan ada beberapasparse matrix
tipe berbedascipy
, yang memungkinkan akses efisien melalui baris atau kolom. Saya membayangkan ini mungkin menjadi masalah untuk menggabungkan konsep-konsep matriks dan array. Yang mengatakan, saya bertanya-tanya apakah mungkin adasparse array
tipe diperkenalkan juga dan apakah ada rencana untuk melakukan itu. Ada petunjuk?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
sumber
tergantung apa yang Anda maksud dengan keanggunan saya kira tapi itulah yang akan saya lakukan
sumber
Anda dapat mencoba varian berikut:
sumber
Jika Anda peduli kecepatan; Tetapi jika Anda peduli dengan memori:
sumber
Atau Anda dapat mencoba menghindari beberapa temps dengan
sumber
Pertama,
Mv = numpy.asarray(M.T)
yang memberi Anda array 4x1 tetapi 2D.Kemudian, lakukan
A = Mv[0,:]
, yang memberi Anda apa yang Anda inginkan. Anda bisa menempatkan mereka bersama, sebagainumpy.asarray(M.T)[0,:]
.sumber
Ini akan mengubah matriks menjadi array
sumber
fungsi ravel () dan flatten () dari numpy adalah dua teknik yang akan saya coba di sini. Saya ingin menambahkan posting yang dibuat oleh Joe , Siraj , bubble , dan Kevad .
Berlepasan:
Meratakan:
numpy.ravel()
lebih cepat , karena ini adalah fungsi tingkat pustaka yang tidak membuat salinan array. Namun, setiap perubahan dalam array A akan membawa dirinya sendiri ke array asli M jika Anda menggunakannumpy.ravel()
.numpy.flatten()
lebih lambat darinumpy.ravel()
. Tetapi jika Anda menggunakannumpy.flatten()
untuk membuat A, maka perubahan dalam A tidak akan terbawa ke array M asli .numpy.squeeze()
danM.reshape(-1)
lebih lambat darinumpy.flatten()
dannumpy.ravel()
.sumber