Numpy: .max() dan .min() tidak bekerja pada array tipe 'S' dan 'U' (Trac #1316)

Dibuat pada 19 Okt 2012  ·  4Komentar  ·  Sumber: numpy/numpy

_Tiket asli http://projects.scipy.org/numpy/ticket/1316 pada 07-12-2009 oleh

Ini adalah operasi yang masuk akal. Akan menyenangkan untuk membuatnya bekerja jika memungkinkan.

In [25]: x.max()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/wonkabar/data1/builds/betadrizzle/<ipython console> in <module>()

TypeError: cannot perform reduce with flexible type

In [26]: x.min()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/wonkabar/data1/builds/betadrizzle/<ipython console> in <module>()

TypeError: cannot perform reduce with flexible type

In [27]:
00 - Bug Other

Semua 4 komentar

Ini harus bisa dilakukan. Perhatikan bahwa argmax dan argmin berfungsi dan mungkin memberikan dan cara mudah untuk mengimplementasikan ini tanpa menggunakan maximum.reduce .

.max dapat mengambil tupel sumbu, argmax hanya dapat menangani satu axis , jadi untuk membuatnya berfungsi untuk kasus umum akan membutuhkan banyak pengocokan sumbu , dan mungkin menyalin untuk menggabungkan sumbu tersebut. keepdims dan out juga ada di tanda tangan max tetapi bukan dari argmax . Jenis apa yang akan terlibat? 'S', 'U' dan 'V'?

Apakah ini masalah yang sama seperti yang dijelaskan dalam nr.

In [1]: np.array([['dd', 'de', 'cc'], ['ae', 'be', 'hf']]).max(axis=0)
TypeError: cannot perform reduce with flexible type

Untuk pertanyaan @jondo (hampir 4 tahun yang lalu pada saat ini tetapi layak untuk

Keluhan Dr Feldman paling baik diungkapkan dengan sebuah contoh. Dia mengatakan "Karena metode .min() dan .max() NumPy bekerja untuk array numerik, dan fungsi min() dan max() Python bekerja untuk string, orang mungkin mengharapkan metode .min() dan .max() NumPy untuk bekerja untuk array string, tetapi mereka tidak[...]"

Berikut ilustrasinya:

import numpy as np

arr_str = np.array(["I'm", "Defying", "Gravity"]) #A wickedly simple array of strings

print(arr_str.max()) #raises "TypeError: cannot perform reduce with flexible type"
#Interestingly, when I just used a native Python list, the error for this line was: "AttributeError: 'list' object has no attribute 'max'"

print(max(arr_str)) #does not raise any kind of error and returns "I'm" no matter where it is in the array of strings above

#This code works as expected
arr_num = np.array([1,2,3,-1])
print(max(arr_num))

Masalah Dr Feldman seperti yang dia nyatakan adalah tentang array string dan ingin menggunakan .max() daripada max(); tetapi kami dapat memperluasnya ke masalah tentang jenis fleksibel apa pun. Perhatikan bahwa dia tidak menyebutkan bahwa max() berfungsi dengan baik ketika kita meneruskan array sebagai parameter, tetapi seperti yang Anda lihat dari contoh di atas, itu berfungsi.

Saya memverifikasi apa yang dikatakan @charris , bahwa .argmax() berfungsi.

Pertanyaan saya untuk komunitas adalah: apakah ini cukup menjadi masalah (harus menggunakan max(list) atau list.argmax) sehingga layak untuk menyelami masalah sumbu yang diangkat oleh

Apakah halaman ini membantu?
0 / 5 - 0 peringkat