Hướng dẫn how to calculate gradient in python - cách tính toán gradient trong python

numpy.gradient (f, *varargs, axis = none, edge_order = 1) [nguồn]#gradient(f, *varargs, axis=None, edge_order=1)[source]#

Trả lại độ dốc của một mảng N chiều.

Độ dốc được tính toán bằng cách sử dụng sự khác biệt trung tâm chính xác thứ hai trong các điểm bên trong và sự khác biệt chính xác của một bên hoặc thứ hai chính xác (tiến hoặc lùi) ở các ranh giới. Độ dốc được trả về do đó có hình dạng giống như mảng đầu vào.

Parametersfarray_likefarray_like

Một mảng N chiều chứa các mẫu của hàm vô hướng.

varargslist của vô hướng hoặc mảng, tùy chọnlist of scalar or array, optional

Khoảng cách giữa các giá trị F. Khoảng cách đơn nhất mặc định cho tất cả các kích thước. Khoảng cách có thể được chỉ định bằng cách sử dụng:

  1. Một vô hướng đơn để chỉ định khoảng cách mẫu cho tất cả các kích thước.

  2. N Scalar để chỉ định khoảng cách mẫu không đổi cho mỗi chiều. tức là dx, dy, dz,

  3. N mảng để chỉ định tọa độ của các giá trị dọc theo mỗi chiều của F. Độ dài của mảng phải khớp với kích thước của kích thước tương ứng

  4. Bất kỳ sự kết hợp của n vô hướng/mảng với ý nghĩa của 2. và 3.

Nếu trục được đưa ra, số lượng vararg phải bằng số trục. Mặc định: 1.

edge_order {1, 2}, tùy chọn{1, 2}, optional

Độ dốc được tính toán bằng cách sử dụng sự khác biệt chính xác thứ tự n-th ở các ranh giới. Mặc định: 1.

Mới trong phiên bản 1.9.1.

trục hoặc int hoặc tuple của int, tùy chọnNone or int or tuple of ints, optional

Độ dốc chỉ được tính toán dọc theo trục hoặc trục đã cho là mặc định (trục = không có) là tính toán độ dốc cho tất cả các trục của mảng đầu vào. Trục có thể là âm, trong trường hợp đó nó được tính từ trục cuối cùng đến trục đầu tiên.

Mới trong phiên bản 1.11.0.

ReturnSgradientNdarray hoặc danh sách ndarraygradientndarray or list of ndarray

Một danh sách các ndarrays (hoặc một ndarray duy nhất nếu chỉ có một chiều) tương ứng với các dẫn xuất của F đối với mỗi chiều. Mỗi đạo hàm có hình dạng giống như f.

Ghi chú

Giả sử rằng \ (f \ in c^{3} \) (tức là, \ (f \) có ít nhất 3 dẫn xuất liên tục) và để \ (h _ {*} \) Lỗi thống nhất, \ (\ eta_ {i} \) giữa độ dốc thực và ước tính của nó từ sự kết hợp tuyến tính của các điểm lưới lân cận:\(f\in C^{3}\) (i.e., \(f\) has at least 3 continuous derivatives) and let \(h_{*}\) be a non-homogeneous stepsize, we minimize the “consistency error” \(\eta_{i}\) between the true gradient and its estimate from a linear combination of the neighboring grid-points:

\] + h_ {d} \ right) + \ gamma f \ left (x_ {i} -h_ {s} \ right) \ right] \]

Bằng cách thay thế \ (f (x_ {i} + h_ {d}) \) và \ (f (x_ {i} - h_ {s}) \) với sự mở rộng của chuỗi Taylor của họ, điều này chuyển thành giải quyết các hệ thống tuyến tính sau đây :\(f(x_{i} + h_{d})\) and \(f(x_{i} - h_{s})\) with their Taylor series expansion, this translates into solving the following the linear system:

\ [\ started {split} \ left \ {\ start d}^{2}+\ gamma h_ {s}^{2} = 0 \ end {mảng} \ right. \ end {split} \]

Việc xấp xỉ kết quả của \ (f_ {i}^{(1)} \) là như sau:\(f_{i}^{(1)}\) is the following:

\ [\ hat f_ {i}^{(1)} = \ frac {h_ {s}^{2} ^{2} - h_ {s}^{2} \ right) f \ left (x_ {i} \ right) - h_ {d}^{2} phải)} {h_ {s} h_ {d} \ left (h_ {d} + h_ {s} \ right)} + \ mathcal {o} \ left (\ frac {h_ {d} h_ {s}^{ 2} + h_ {s} h_ {d}^{2}} {h_ {d} + h_ {s}} \ right) \]

Điều đáng chú ý là nếu \ (h_ {s} = h_ {d} \) (tức là, dữ liệu được đặt cách đều nhau), chúng tôi tìm thấy xấp xỉ thứ tự thứ hai tiêu chuẩn:\(h_{s}=h_{d}\) (i.e., data are evenly spaced) we find the standard second order approximation:

\] \ Mathcal {o} \ left (H^{2} \ right) \]

Với một quy trình tương tự, các xấp xỉ tiến/lùi được sử dụng cho các ranh giới có thể được bắt nguồn.

Người giới thiệu

1

Quadoni A., Sacco R., Saleri F. (2007) Toán học số (văn bản trong toán học ứng dụng). New York: Springer.

2

Durran D. R. (1999) Phương pháp số cho các phương trình sóng trong động lực học chất lỏng địa vật lý. New York: Springer.

3

Fornberg B. (1988) Thế hệ của các công thức khác biệt hữu hạn trên các lưới cách đều nhau, toán học của tính toán 51, không. 184: 699-706. PDF.

Ví dụ

>>> f = np.array([1, 2, 4, 7, 11, 16], dtype=float)
>>> np.gradient(f)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])
>>> np.gradient(f, 2)
array([0.5 ,  0.75,  1.25,  1.75,  2.25,  2.5 ])

Khoảng cách cũng có thể được chỉ định với một mảng đại diện cho tọa độ của các giá trị F dọc theo kích thước. Ví dụ, một khoảng cách thống nhất:

>>> x = np.arange(f.size)
>>> np.gradient(f, x)
array([1. ,  1.5,  2.5,  3.5,  4.5,  5. ])

Hoặc một cái không đồng nhất:

>>> x = np.array([0., 1., 1.5, 3.5, 4., 6.], dtype=float)
>>> np.gradient(f, x)
array([1. ,  3. ,  3.5,  6.7,  6.9,  2.5])

Đối với hai mảng hai chiều, lợi nhuận sẽ là hai mảng được đặt hàng theo trục. Trong ví dụ này, mảng đầu tiên là viết tắt của gradient theo hàng và cái thứ hai theo hướng cột:

>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float))
[array([[ 2.,  2., -1.],
       [ 2.,  2., -1.]]), array([[1. , 2.5, 4. ],
       [1. , 1. , 1. ]])]

Trong ví dụ này, khoảng cách cũng được chỉ định: đồng nhất cho trục = 0 và không đồng nhất cho trục = 1

>>> dx = 2.
>>> y = [1., 1.5, 3.5]
>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float), dx, y)
[array([[ 1. ,  1. , -0.5],
       [ 1. ,  1. , -0.5]]), array([[2. , 2. , 2. ],
       [2. , 1.7, 0.5]])]

Có thể chỉ định cách xử lý ranh giới bằng cách sử dụng edge_order

>>> x = np.array([0, 1, 2, 3, 4])
>>> f = x**2
>>> np.gradient(f, edge_order=1)
array([1.,  2.,  4.,  6.,  7.])
>>> np.gradient(f, edge_order=2)
array([0., 2., 4., 6., 8.])

Từ khóa trục có thể được sử dụng để chỉ định một tập hợp các trục mà độ dốc được tính toán

>>> np.gradient(np.array([[1, 2, 6], [3, 4, 5]], dtype=float), axis=0)
array([[ 2.,  2., -1.],
       [ 2.,  2., -1.]])

Làm thế nào để bạn tìm thấy độ dốc của một điểm trong Python?

Chúng tôi sẽ sử dụng numdifftools để tìm độ dốc của một hàm. Ví dụ: Đầu vào: X^4+X+1 Đầu ra: Độ dốc của x^4+x+1 tại x = 1 là 4,99 đầu vào: (1-x)^2+(y-x^2)^2 đầu ra: gradient của ( 1-x^2)+(y-x^2)^2 tại (1, 2) là [-4.use numdifftools to find Gradient of a function. Examples: Input : x^4+x+1 Output :Gradient of x^4+x+1 at x=1 is 4.99 Input :(1-x)^2+(y-x^2)^2 Output :Gradient of (1-x^2)+(y-x^2)^2 at (1, 2) is [-4.

Độ dốc trong Python là gì?

gradient là hàm hoặc bất kỳ đối tượng có thể gọi Python nào có một vectơ và trả về độ dốc của hàm bạn đang cố gắng giảm thiểu.Bắt đầu là điểm mà thuật toán bắt đầu tìm kiếm của nó, được đưa ra dưới dạng một chuỗi (tuple, danh sách, mảng numpy, v.v.) hoặc vô hướng (trong trường hợp vấn đề một chiều).the function or any Python callable object that takes a vector and returns the gradient of the function you're trying to minimize. start is the point where the algorithm starts its search, given as a sequence (tuple, list, NumPy array, and so on) or scalar (in the case of a one-dimensional problem).

Làm thế nào để tính toán gradient?

Độ dốc được tính toán bằng cách sử dụng sự khác biệt trung tâm chính xác thứ hai trong các điểm bên trong và sự khác biệt chính xác của một bên hoặc thứ hai chính xác (tiến hoặc lùi) ở các ranh giới.Độ dốc được trả về do đó có hình dạng giống như mảng đầu vào.using second order accurate central differences in the interior points and either first or second order accurate one-sides (forward or backwards) differences at the boundaries. The returned gradient hence has the same shape as the input array.

Làm thế nào để bạn thực hiện một chức năng gradient trong Python?

Để thực hiện một thuật toán giảm dần độ dốc, chúng ta cần làm theo 4 bước:..
Khởi tạo ngẫu nhiên sự thiên vị và trọng lượng theta ..
Tính giá trị dự đoán của y là y cho độ lệch và trọng lượng ..
Tính hàm chi phí từ các giá trị dự đoán và thực tế của y ..
Tính toán gradient và trọng số ..