Numpy: BUG: penemuan dimensi gagal saat mencampur skalar dan bentuk == (1,) array

Dibuat pada 9 Des 2019  ·  5Komentar  ·  Sumber: numpy/numpy

np.array([0.25, np.array([0.3])]) akan gagal membuat float array, dtype akan menjadi objek.

Ini tampaknya salah bagi saya, apakah ini disengaja?

00 - Bug numpy.dtype

Semua 5 komentar

Cc @nschloe , yang menentang hal semacam ini dan dapat menautkan ke masalah mereka

Terima kasih telah membuat CC. Ya, ini benar-benar terlihat seperti sesuatu yang saya alami. : smiley_cat: https://github.com/numpy/numpy/issues/10404

Saya berpendapat bahwa membuat array objek adalah hal yang benar di sini. Bagaimanapun, Anda menempatkan pelampung dan array bersama. Jika Anda membuat daftar Python,

[0.25, np.array([0.3])]

Anda akan mengharapkan hal yang sama: Entri pertama adalah float, yang kedua adalah array dengan panjang 1. Akan membingungkan jika list dan np.arrays berperilaku berbeda di sini.

Juga, secara implisit membuat array dtype float di sini akan membuatnya tidak mungkin untuk membuat array [float, vector[1]] bahkan jika saya mau.

Seringkali, menentukan np.array([0.25, np.array([0.3])]) dilakukan karena kesalahan, dan dapat dengan mudah diperbaiki; lihat, misalnya, https://github.com/scipy/scipy/pull/11147/files#diff -21a6a0b0d89357857304bfba2da5a971L321. Lagipula,

Eksplisit lebih baik daripada implisit.

Oke, tutup. PR itu akan membuat perubahan NEP 34 baru-baru ini (sejak dikembalikan) tidak terlalu mengganggu scipy.

@nns_semarang

secara implisit membuat dtype float array di sini akan membuatnya tidak mungkin untuk membuat array [float, vector [1]] bahkan jika saya mau.

Sebagai catatan, Anda dapat melakukan np.array(0.3, np.array([0.3]), dtype=object) .

Jika Anda membuat daftar Python ...

Ndarrays NumPy sangat berbeda dari daftar python. Saya tidak berharap itu
np.array([0.2, 0.3, 0.4]) akan membuat larik objek, meskipun saya tidak menentukan np.float64 untuk dtype. Jadi kami setuju bahwa kami merasa nyaman dengan beberapa tingkat penemuan tipe otomatis berbasis nilai. Pertanyaannya adalah apa yang harus diutamakan: tipe numerik atau tipe objek.

Jadi kami setuju bahwa kami merasa nyaman dengan beberapa tingkat penemuan tipe otomatis berbasis nilai.

"Otomatisasi" cukup jelas di sini menurut saya: Selalu dapatkan jenis data "terendah" yang dapat menangkap semua nilai masukan:

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
Apakah halaman ini membantu?
0 / 5 - 0 peringkat