np.max
chỉ là một bí danh cho np.amax
. Hàm này chỉ hoạt động trên một mảng đầu vào duy nhất và tìm giá trị của phần tử tối đa trong toàn bộ mảng đó (trả về một vô hướng). Ngoài ra, nó cần một axis
đối số và sẽ tìm giá trị tối đa dọc theo trục của mảng đầu vào (trả về một mảng mới).
>>> a = np.array([[0, 1, 6],
[2, 4, 1]])
>>> np.max(a)
6
>>> np.max(a, axis=0) # max of each column
array([2, 4, 6])
Hành vi mặc định của np.maximum
là lấy hai mảng và tính toán tối đa phần tử của chúng. Ở đây, 'tương thích' có nghĩa là một mảng có thể được phát sang mảng khác. Ví dụ:
>>> b = np.array([3, 6, 1])
>>> c = np.array([4, 2, 9])
>>> np.maximum(b, c)
array([4, 6, 9])
Nhưng np.maximum
cũng là một chức năng phổ quát , có nghĩa là nó có các tính năng và phương thức khác hữu ích khi làm việc với các mảng đa chiều. Ví dụ: bạn có thể tính toán mức tối đa tích lũy trên một mảng (hoặc một trục cụ thể của mảng):
>>> d = np.array([2, 0, 3, -4, -2, 7, 9])
>>> np.maximum.accumulate(d)
array([2, 2, 3, 3, 3, 7, 9])
Điều này là không thể với np.max
.
Bạn có thể np.maximum
bắt chước np.max
ở một mức độ nhất định khi sử dụng np.maximum.reduce
:
>>> np.maximum.reduce(d)
9
>>> np.max(d)
9
Thử nghiệm cơ bản cho thấy hai cách tiếp cận có thể so sánh về hiệu suất; và họ nên, như np.max()
thực sự kêu gọinp.maximum.reduce
để thực hiện tính toán.
Cảm ơn. Rõ ràng người ta có thể sử dụng
– Bùi Kim Châu 15:26:02 06/11/2015amax
cho cùng một mục đích (gốc) nhưmaximum
, tức là vớinumpy.amax([a1, a2], axis=0)
--- nhưng điều này không được tối ưu hóa cho hành vi này nhưnumpy.maximum
? Tương tự như vậy, các niceties được thêm vàonumpy.amax
(ví dụaxis
tham số) có loại trừ nóufunc
không?Điều đó đúng,
– Hoàng Tùy Anh 15:31:58 06/11/2015amax
không được tối ưu hóa để so sánh phần tử theo cách này - bất kỳ đầu vào nào cũng cần phải là một mảng Numpy, vì vậy danh sách đó sẽ được chuyển đổi trước khi hoạt động chạy (giả sử rằng hai hình dạng giống nhau). Các tài liệuamax
nói cụ thểmaximum
là nhanh hơn ở đây.Ở câu hỏi thứ hai: Tôi đoán
– Minh Tuấn 15:36:19 06/11/2015amax
có thể được tạo thành một ufunc, mặc dù mục đích chính của ufuncs là cho phép các hoạt động được phát giữa các mảng. Có vẻ như không cần phải thực hiệnmax
một ufunc unary. Tôi nghĩ rằngamax
đã tồn tại trước khi ufuncs thực sự là một thứ (nó xuất phát từ số, cha mẹ của NumPy) nên cũng được giữ lại cho hậu thế.Ở đây
– Hoàng Quang Tuấn 07:06:12 15/02/2019maximum.reduce
được ưu tiên cho hiệu suất:The Python function max() will find the maximum over a one-dimensional array, but it will do so using a slower sequence interface. The reduce method of the maximum ufunc is much faster. Also, the max() method will not give answers you might expect for arrays with greater than one dimension.
[...]@TomHale: Tôi nghĩ rằng tài liệu này đề cập đến hàm Python tích hợp sẵn
– Lý Hạnh My 11:15:25 16/02/2019max()
, chứ không phảinumpy.max()
, nhưng chắc chắn chỉ ra rằng Pythonmax()
chậm hơn.