Numpy: Vstack yang funky

Dibuat pada 22 Jul 2020  ·  7Komentar  ·  Sumber: numpy/numpy

Dari vstack dokumen:

Tanda tangan: hstack(tup)
Docstring:
Susun array secara berurutan secara horizontal (bijaksana kolom).

Ini sama dengan penggabungan sepanjang sumbu kedua, kecuali untuk 1-D
array yang menggabungkan sepanjang sumbu pertama.

Pertanyaan saya adalah mengapa pengecualian ???
Kami sudah memiliki concatenate() .

Contoh kode reproduksi:

v = rand(5)
concatenate((v, v)).shape
(10,)

hstack((v, v)).shape
(10,)

stack((v, v), axis=1).shape
(5, 2)

vstack((v, v)).shape
(2, 5)

stack((v, v), axis=0).shape
(2, 5)

Akan jauh lebih masuk akal jika memiliki vstack = stack(axis=1) .

33 - Question

Semua 7 komentar

Kami tidak menganjurkan hstack / vstack / dstack, dan kami secara khusus mendorong np.stack sebagai gantinya. Namun, perbedaannya adalah jika Anda mengirimkan larik 2-D. Beberapa fungsi tumpukan memasukkan dimensi baru (untuk inkarnasi tertentu), saya kira hstack tidak.

Menambahkan kalimat terakhir yang menyatakan bahwa np.concatenate atau np.stack adalah API yang lebih disukai (biasanya) akan baik-baik saja, tapi saya rasa kami tidak memiliki aspirasi nyata dalam menghapus fungsi.

Pertanyaan saya adalah _mengapa pengecualian _ ???

Hanya karena @seberg tidak langsung menjawab ini:

  • seseorang dahulu kala mengira itu ide yang bagus
  • sekarang sudah terlambat untuk mengubahnya tanpa merusak semua orang

Array 1D umumnya diperlakukan sebagai "horizontal" dalam numpy daripada "vertikal". Misalnya, saat menyiarkan array (N, N) 2D dengan array (N,) 1D, array 1D disiarkan ke (1, N) , bukan (N, 1) . hstack()/vstack()/dstack() tidak dibangun di sekitar konsep sumbu konstan (Anda dapat menggunakan stack() jika Anda menginginkannya) tetapi konsep "horizontal / vertikal / kedalaman" yang tidak dipetakan dengan rapi ke sumbu tetap untuk semua dimensi array.

Saya -1 tentang bahasa mengecilkan hati hstack()/vstack()/dstack() , per se. Saya _masih_ berpikir mereka bagus dan berguna _ karena_ pengecualian dalam semantik mereka. Mereka menangkap konsep yang tidak ditangkap secara ringkas dengan stack() .

Misalnya, ada kebutuhan umum untuk menambahkan atau menambahkan nilai skalar ke larik 1D. np.hstack([0.0, some_vector]) berfungsi dengan baik untuk ini. np.stack([0.0, some_vector]) dan np.concatenate([0.0, some_vector]) gagal karena keduanya tidak memiliki dimensi yang sama.

Benar, alat ini hanya sedikit terkait dengan bekerja dalam konteks tertentu menurut saya. Jadi mari kita tutup ini. Kami memiliki alat umum tanpa perilaku "funky", dan yang lainnya akan tetap ada saat alat tersebut merupakan utilitas yang baik.

@rkern , maka concatenate perlu diperbaiki, IMHO. Menumpuk berarti menggabungkan setelah menambahkan redup tambahan, yang tidak diterapkan di sini. Tapi, oke…

@seberg , sepertinya peringatan penghentian penggunaan akan diterima di sini. Array 1D tidak horizontal atau vertikal. Dan hstack kembali ke concatenate , lupa menambahkan dimensi ekstra. Ini memang terlihat "funky". Tetapi jika Anda tidak ingin berdiskusi, yah…

Semua fungsi ?stack lainnya juga menambahkan redup tambahan hanya jika redupnya lebih rendah dari apa yang diperlukan untuk melakukan operasi sekarang. Dalam hal ini yang hanya mencakup 0d.

@Atcold Saya terbuka untuk saran untuk mendorong pengguna ke stack , tetapi mungkin dalam batasan tidak secara aktif menakut-nakuti mereka dari menggunakan fungsi-fungsi ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

astrofrog picture astrofrog  ·  4Komentar

Levstyle picture Levstyle  ·  3Komentar

Kreol64 picture Kreol64  ·  3Komentar

dmvianna picture dmvianna  ·  4Komentar

inducer picture inducer  ·  3Komentar