Saya menggunakan perpustakaan Gizeh dan saya mendapatkan kesalahan di atas saat menginstal Numpy versi terbaru. Tidak ada kesalahan dengan Numpy versi 1.08.
File "animation/target_animation.py", line 161, in draw
fill = gizeh.ImagePattern(self.bg.data, self.bg.pos, filter='best')
File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 295, in __init__
File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 50, in from_image
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('uint8') with casting rule 'same_kind'
Apakah ada solusi atau tolong perbaiki masalah ini?
Anda perlu membuat pemeran eksplisit menggunakan argumen casting
di np.add
ufunc. Perilaku yang bergantung pada Gizeh telah ditinggalkan sejak 1.7.
Itu adalah casting='unsafe'
.
di mana saya harus mengubah @charris ini?
Biasanya ini adalah kode seperti a += b
dan Anda perlu membuatnya np.add(a, b, out=a, casting="unsafe")
(jika Anda yakin menginginkan perilaku pemeran yang tidak aman. Atau, kecuali b besar dan aman, mungkin hanya cast b pertama.
Saya mengerti bahwa saya berbicara secara khusus untuk perubahan yang akan dilakukan pada gizeh/moviepy .
Dalam kasus saya, saya memiliki masalah serupa. Itu diselesaikan seperti yang disarankan oleh seberg. Saya mengganti baris 40 di gizeh.py:
arr += image.flatten()
dengan garis:
arr = np.add(arr, image.flatten(), out=arr, casting="unsafe")
Saya harap ini membantu orang lain.
Saya mengalami masalah ini ketika _mengurangi_ seperti ini:
yn -= self.y_mean
Kesalahan saya hilang ketika saya melakukan pengurangan melalui numpy.subtract , seperti:
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")
Terima kasih banyak @seberg :+1:
@FilipSavic95 : Bisa juga melakukan yn -= self.y_mean.astype(yn.dtype)
@eric-wieser Ya, saya baru saja mencoba solusi Anda dan berhasil. Terima kasih telah mempostingnya. :+1:
Pertanyaannya adalah presisi mana yang ingin Anda gunakan untuk operasi itu sendiri. pengecoran yang tidak aman akan melakukan operasi dalam presisi (rhs) yang lebih besar (atau kombinasi tipe aman) opsi lain akan melakukan gips dan dengan demikian operasi dalam presisi yang lebih rendah.
Komentar yang paling membantu
Biasanya ini adalah kode seperti
a += b
dan Anda perlu membuatnyanp.add(a, b, out=a, casting="unsafe")
(jika Anda yakin menginginkan perilaku pemeran yang tidak aman. Atau, kecuali b besar dan aman, mungkin hanya cast b pertama.