Tôi muốn biết cách hoạt động của numpy.gradient
. Tôi đã sử dụng gradient để thử tính toán vận tốc nhóm (vận tốc nhóm của gói sóng là đạo hàm của các tần số liên quan đến wavenumbers, không phải là nhóm vận tốc). Tôi cho ăn một mảng 3 cột với nó, 2 colums đầu tiên là x và y coords, cột thứ ba là tần số của điểm đó (x, y). Tôi cần phải tính toán gradient và tôi đã mong đợi một vector 2d, là dốc nétTính toán độ dốc với python
df/dx*i+df/dy*j+df/dz*k
và chức năng của tôi chỉ có một hàm của x và yi đã mong đợi một cái gì đó giống như
df/dx*i+df/dy*j
Nhưng tôi đã nhận 2 mảng với 3 colums mỗi, tức là 2 vectơ 3d; lúc đầu tôi nghĩ rằng tổng của cả hai sẽ cho tôi véc tơ tôi đã tìm kiếm nhưng thành phần z không biến mất. Tôi hy vọng tôi đã đủ rõ ràng trong lời giải thích của tôi. Tôi muốn biết làm thế nào numpy.gradient
hoạt động và nếu đó là sự lựa chọn đúng cho vấn đề của tôi. Nếu không tôi muốn biết nếu có bất kỳ chức năng python khác tôi có thể sử dụng.
gì tôi có nghĩa là: Tôi muốn tính toán gradient của một mảng các giá trị:
data=[[x1,x2,x3]...[x1,x2,x3]]
nơi x1, x2 là điểm tọa độ trên lưới thống nhất (điểm của tôi về vùng Brillouin) và x3 là giá trị tần số cho điểm đó. Tôi cung cấp cho đầu vào cũng bước cho derivation cho 2 hướng:
stepx=abs(max(unique(data[:,0])-min(unique(data[:,0]))/(len(unique(data[:,0]))-1)
tương tự cho hướng y. Tôi không xây dựng dữ liệu của mình trên lưới, tôi đã có lưới và đây là lý do tại sao các ví dụ được đưa ra ở đây trong câu trả lời không giúp tôi. Một ví dụ phù hợp hơn nên có một mạng lưới các điểm và các giá trị như một tôi có:
data=[]
for i in range(10):
for j in range(10):
data.append([i,j,i**2+j**2])
data=array(data,dtype=float)
gx,gy=gradient(data)
một điều tôi có thể thêm là lưới của tôi không phải là một hình vuông nhưng có hình dạng của một đa giác là Brillouin vùng của tinh thể 2d.
Tôi đã hiểu rằng numpy.gradient
chỉ hoạt động đúng trên một mạng lưới giá trị vuông, chứ không phải những gì tôi đang tìm kiếm. Ngay cả khi tôi tạo dữ liệu của tôi dưới dạng lưới sẽ có nhiều số không bên ngoài đa giác của dữ liệu gốc, điều đó sẽ thêm các vectơ thực sự cao vào gradient của tôi ảnh hưởng đến độ chính xác của tính toán. Mô-đun này dường như với tôi nhiều đồ chơi hơn là một công cụ, nó có những hạn chế nghiêm trọng.
Sự cố được giải quyết bằng từ điển.
Soooo câu hỏi là gì? Bạn nên sử dụng mô-đun nào? Có vấn đề gì không? – Stephan
Câu hỏi là gradient làm gì? Tại sao lại cho tôi 2 vectơ 3d thay vì 1 vector 2d? Do gradient thực sự tính toán thực sự là một gradient? Bởi sản lượng của nó tôi không thể nói. Không nhìn chính xác với tôi. –
Tôi nghĩ rằng nó là rõ ràng, thành phần thứ 3 của đầu vào của tôi là trường vô hướng, mỗi giá trị trên thành phần thứ 3 là giá trị của hàm của tôi cho mỗi điểm (x, y). –