Saya mendapatkan kesalahan saat mencoba ke right_shift array dengan numpy:

Berikut kodenya:

import numpy as np
a = np.ones((10, 10)) * 64
a.astype("int16")
b = a >> 2

Dan saya mengerti

TypeError: ufunc 'right_shift' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Namun menurut dokumen, menurut saya ini harus berhasil.

1
Miguel Angel Peinado Montes 13 Mei 2021, 14:01

1 menjawab

Jawaban Terbaik

Metode astype tidak dapat beroperasi di tempat karena melemparkan elemen ke ukuran yang berbeda dalam kasus umum. Float umumnya 64 bit, sedangkan int16 jelas 16 bit.

Akibatnya, baris a.astype("int16") adalah no-op.

Anda dapat menulisnya sebagai

a = a.astype("int16")

Atau gabungkan dua baris terakhir:

b = a.astype("int16") >> 2

Namun, secara umum, menggunakan astype adalah bau kode. Numpy menyediakan fasilitas untuk mengalokasikan array dengan tipe dan nilai yang benar untuk memulai:

a = np.full((10, 10), 64, dtype=np.int16)
b = a >> 2
1
Mad Physicist 13 Mei 2021, 14:50