Numpy: BUG: promosi timedelta dan float terkadang berhasil

Dibuat pada 10 Jun 2020  ·  4Komentar  ·  Sumber: numpy/numpy

Contoh berikut tidak memberikan hasil yang simetris:

np.promote_types("float32", "m8")
# returns "m8", which is probably wrong
np.promote_types("m8", "float32")
# raises TypeError.

Hal yang sama berlaku untuk semua jenis floating point lainnya. Saya ingin tahu apakah ada logika aneh untuk ini, sebagai retasan untuk mengizinkan panggilan ufunc tertentu, tetapi saya belum menemukannya.

00 - Bug numpy.dtype

Semua 4 komentar

Sepertinya setidaknya np.multiply mendukung ini.

import numpy as np
print(np.multiply(np.timedelta64(1), 1.2))

Saya pikir hal di atas juga harus dianggap sebagai bug.

Saya pikir pertanyaannya adalah selalu benar bahwa untuk ufuncs "aturan casting diimplementasikan oleh pertanyaan kapan tipe data dapat dilemparkan" dengan aman "ke tipe data lain" seperti yang dijelaskan dalam dokumentasi. Sepertinya ada pengecualian seperti di atas di mana casting tidak aman tetapi kami telah membuat ufunc berfungsi. Saya kira dalam kasus ini promotion_types harus tetap mengatakan jenis promosi yang tidak valid (untuk np.promote_types ("float32", "m8") dan np.promote_types ("m8", "float32")). Apakah kita perlu terus mengizinkan ufunc bekerja dapat diputuskan berdasarkan kasus per kasus?

Ya, kita harus membedakan dengan jelas bahwa np.promote_types harus merupakan aturan umum yang selalu masuk akal. Itulah mengapa saya menyukai istilah "tipe umum". Ini misalnya dtype yang dapat digunakan dengan np.concatenate .

Setiap ufunc secara individual dapat memutuskan untuk mengimplementasikan operasi tertentu menggunakan "common dtype" atau logika lainnya. Kami secara khusus melakukannya untuk beberapa dan timedelta64, jadi itu memang masalah yang terpisah.

Saya kira kita tidak benar-benar menggunakan logika ini di banyak tempat, karena sebagian besar ufunc mengandalkan np.can_cast(..., ...) sebagai catatan Anda. Dan sementara itu biasanya diselaraskan dengan jenis promosi, itu tidak ada di sini.

Mengingat diskusi di atas, saya melanjutkan dan menambahkan perbaikan untuk promot_types.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat