Trong hầu hết các trường hợp phương pháp này là phiên bản được biên soạn cơ bản. Hàm này sử dụng phương thức đó khi có sẵn, nhưng cũng có một số loại sao lưu khi đối số không phải là một mảng. Nó giúp xem mã và/hoặc tài liệu của hàm hoặc phương thức.
Ví dụ nếu trong Ipython
Tôi hỏi để xem xét các mã cho các phương pháp tổng hợp, tôi thấy rằng nó được biên dịch mã
In [711]: x.sum??
Type: builtin_function_or_method
String form: <built-in method sum of numpy.ndarray object at 0xac1bce0>
...
Refer to `numpy.sum` for full documentation.
Làm tương tự trên np.sum
tôi nhận được nhiều dòng tài liệu cộng với một số mã Python :
if isinstance(a, _gentype):
res = _sum_(a)
if out is not None:
out[...] = res
return out
return res
elif type(a) is not mu.ndarray:
try:
sum = a.sum
except AttributeError:
return _methods._sum(a, axis=axis, dtype=dtype,
out=out, keepdims=keepdims)
# NOTE: Dropping the keepdims parameters here...
return sum(axis=axis, dtype=dtype, out=out)
else:
return _methods._sum(a, axis=axis, dtype=dtype,
out=out, keepdims=keepdims)
Nếu tôi gọi np.sum(x)
nơi x
là một mảng, nó kết thúc lên gọi x.sum()
:
sum = a.sum
return sum(axis=axis, dtype=dtype, out=out)
np.amax
tương tự (nhưng đơn giản hơn). Lưu ý rằng biểu mẫu np.
có thể xử lý một đối tượng không phải là một mảng (không có phương thức), ví dụ: một danh sách: np.amax([1,2,3])
.
np.dot
và x.dot
cả hai đều hiển thị dưới dạng chức năng 'được tích hợp sẵn', vì vậy chúng tôi không thể nói gì về mức độ ưu tiên. Họ có thể cả hai kết thúc lên gọi một số chức năng C cơ bản.
np.reshape
là khác mà deligates nếu có thể:
try:
reshape = a.reshape
except AttributeError:
return _wrapit(a, 'reshape', newshape, order=order)
return reshape(newshape, order=order)
Vì vậy np.reshape(x,(2,3))
là giống hệt nhau trong chức năng để x.reshape((2,3))
. Nhưng biểu thức _wrapit
cho phép np.reshape([1,2,3,4],(2,2))
.
np.sort
trả về một bản sao bằng cách làm một loại inplace trên một bản sao:
a = asanyarray(a).copy()
a.sort(axis, kind, order)
return a
x.resize
là built-in, trong khi np.resize
kết thúc lên làm một np.concatenate
và reshape
.
Nếu mảng của bạn là một phân lớp, như ma trận hoặc mặt nạ, nó có thể có biến thể riêng của nó. Các hành động của một ma trận .sum
là:
return N.ndarray.sum(self, axis, dtype, out, keepdims=True)._collapse(axis)
Trong hầu hết các trường hợp, các phiên bản chức năng kết thúc lên gọi phiên bản phương pháp (ràng buộc với lập luận 1). Nhưng hàm có thể có 'doc' dài hơn. Đối với người dùng, nó chủ yếu là vấn đề về phong cách. – hpaulj
Xem thêm vấn đề này: https://github.com/numpy/numpy/issues/7452. Có vẻ như các nhà phát triển vất vả muốn loại bỏ cú pháp phương pháp, nhưng không thể do nhu cầu duy trì khả năng tương thích ngược. Cá nhân tôi thích nó chỉ được thực hiện phù hợp để tất cả các chức năng có thể được gọi là phương pháp hơn là một vài lựa chọn. – Peter