Apakah ada cara untuk menginisialisasi array numpy bentuk dan menambahkannya? Saya akan menjelaskan apa yang saya butuhkan dengan contoh daftar. Jika saya ingin membuat daftar objek yang dihasilkan dalam satu lingkaran, saya dapat melakukan:
a = []
for i in range(5):
a.append(i)
Saya ingin melakukan sesuatu yang mirip dengan array numpy. Saya tahu tentang vstack, concatenate dll. Namun, sepertinya ini membutuhkan dua array numpy sebagai input. Yang saya butuhkan adalah:
big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
array i of shape = (2,4) created.
add to big_array
The big_array
harus memiliki bentuk (10,4)
. Bagaimana cara melakukannya?
EDIT:
Saya ingin menambahkan klarifikasi berikut. Saya sadar bahwa saya dapat mendefinisikan big_array = numpy.zeros((10,4))
dan mengisinya. Namun, ini membutuhkan spesifikasi ukuran big_array terlebih dahulu. Saya tahu ukuran dalam hal ini, tetapi bagaimana jika saya tidak melakukannya? Ketika kita menggunakan .append
fungsi untuk memperluas daftar dengan python, kita tidak perlu tahu ukuran akhirnya terlebih dahulu. Saya bertanya-tanya apakah ada yang serupa untuk membuat array yang lebih besar dari array yang lebih kecil, dimulai dengan array kosong.
[i for i in range(5)]
. (Setara:,list(range(5))
meskipun ini adalah contoh yang dibuat-buat.)x = numpy.array()
yang akan kita lakukan pada daftar sepertiy = []
; tapi itu tidak berhasilJawaban:
atau
atau
Namun, mentalitas di mana kita membangun sebuah array dengan menambahkan elemen ke daftar tidak banyak digunakan dalam numpy, karena itu kurang efisien (tipe data numpy jauh lebih dekat dengan array C yang mendasarinya). Sebagai gantinya, Anda harus melakukan pra-alokasi array ke ukuran yang Anda inginkan, dan kemudian mengisi baris. Anda dapat menggunakan
numpy.append
jika Anda harus.sumber
append
numpy. Hanya saja itu kurang efisien untuk tidak melakukan prealokasi (dalam hal ini, jauh lebih efisien, karenaappend
menyalin seluruh array setiap waktu), jadi itu bukan teknik standar.np.empty
array yang diisi oleh nilai? Bagaimana dengan item "kosong" yang tersisa?np.concatenate()
), Anda dapat menginisialisasi dengan:np.empty((0, some_width))
. 0, jadi array pertama Anda tidak akan menjadi sampah.Cara saya biasanya melakukan itu adalah dengan membuat daftar reguler, kemudian menambahkan barang-barang saya ke dalamnya, dan akhirnya mengubah daftar menjadi array numpy sebagai berikut:
tentu saja objek akhir Anda mengambil dua kali ruang dalam memori pada langkah pembuatan, tetapi menambahkan daftar python sangat cepat, dan pembuatan menggunakan np.array () juga.
sumber
Diperkenalkan pada numpy 1.8:
Contoh:
sumber
Array analog untuk python
adalah:
sumber
empty((0))
menginisialisasi array yang numpy.numpy.fromiter()
adalah apa yang Anda cari:Ia juga bekerja dengan ekspresi generator, misalnya:
Jika Anda mengetahui panjang array sebelumnya, Anda dapat menentukannya dengan argumen 'hitung' opsional.
sumber
Anda memang ingin menghindari loop eksplisit sebanyak mungkin saat melakukan komputasi array, karena hal itu mengurangi perolehan kecepatan dari bentuk komputasi itu. Ada beberapa cara untuk menginisialisasi array numpy. Jika Anda ingin diisi dengan nol, lakukan seperti katrielalex berkata:
big_array = numpy.zeros((10,4))
EDIT: Urutan macam apa yang Anda buat? Anda harus memeriksa berbagai fungsi numpy yang membuat array, seperti
numpy.linspace(start, stop, size)
(nomor dengan spasi yang sama), ataunumpy.arange(start, stop, inc)
. Jika memungkinkan, fungsi-fungsi ini akan membuat array jauh lebih cepat daripada melakukan pekerjaan yang sama dalam loop eksplisitsumber
Untuk contoh array pertama Anda gunakan,
Untuk menginisialisasi big_array, gunakan
Ini mengasumsikan Anda ingin menginisialisasi dengan nol, yang cukup khas, tetapi ada banyak cara lain untuk menginisialisasi array dalam numpy .
Sunting: Jika Anda tidak tahu ukuran big_array di muka, umumnya yang terbaik adalah membuat daftar Python terlebih dahulu menggunakan append, dan ketika Anda telah mengumpulkan semuanya dalam daftar, konversikan daftar ini ke array numpy menggunakan
numpy.array(mylist)
. Alasan untuk ini adalah bahwa daftar dimaksudkan untuk tumbuh dengan sangat efisien dan cepat, sedangkan numpy.concatenate akan sangat tidak efisien karena array numpy tidak mengubah ukuran dengan mudah. Tapi begitu semuanya dikumpulkan dalam daftar, dan Anda tahu ukuran array terakhir, array numpy dapat dibangun secara efisien.sumber
Untuk menginisialisasi array numpy dengan matriks tertentu:
keluaran:
sumber
Setiap kali Anda dalam situasi berikut:
dan Anda menginginkan sesuatu yang serupa di numpy, beberapa jawaban sebelumnya telah menunjukkan cara untuk melakukannya, tetapi seperti @katrielalex tunjukkan metode ini tidak efisien. Cara efisien untuk melakukan ini adalah membangun daftar panjang dan kemudian membentuknya kembali seperti yang Anda inginkan setelah Anda memiliki daftar panjang. Sebagai contoh, katakanlah saya membaca beberapa baris dari sebuah file dan setiap baris memiliki daftar angka dan saya ingin membangun array bentuk yang numpy (jumlah baris yang dibaca, panjang vektor di setiap baris). Inilah cara saya melakukannya dengan lebih efisien:
sumber
Saya menyadari bahwa ini agak terlambat, tetapi saya tidak melihat jawaban lain yang menyebutkan pengindeksan ke dalam array kosong:
Dengan cara ini, Anda mengalokasikan seluruh array hasil dengan
numpy.empty
dan mengisi baris saat Anda menggunakan tugas yang diindeks.Sangat aman untuk melakukan praalokasi dengan
empty
bukanzeros
dalam contoh yang Anda berikan karena Anda menjamin bahwa seluruh array akan diisi dengan potongan yang Anda hasilkan.sumber
Saya sarankan mendefinisikan bentuk terlebih dahulu. Kemudian beralih di atasnya untuk memasukkan nilai.
sumber
Mungkin sesuatu seperti ini akan sesuai dengan kebutuhan Anda ..
Yang menghasilkan output sebagai berikut
sumber