Tôi đang cố gắng thực hiện mô phỏng cho một mô hình mạng (lattice boltzmann) trong Python. Mỗi trang web của mạng có một số thuộc tính và tương tác với các trang web lân cận theo các quy tắc nhất định. Tôi nghĩ rằng nó có thể là thông minh để làm cho một lớp học với tất cả các thuộc tính và tạo ra một mạng lưới các trường hợp của lớp đó. (Như tôi thiếu kinh nghiệm với Python, điều này có thể không phải là một ý tưởng tốt ở tất cả, vì vậy cảm thấy tự do để nhận xét về cách tiếp cận của tôi.)mảng nhiều đối tượng
Dưới đây là một ví dụ đồ chơi về những gì tôi đang làm
class site:
def __init__(self,a,...):
self.a = a
.... other properties ...
def set_a(self, new_a):
self.a = new_a
Bây giờ tôi muốn đối phó với một mạng lưới 2D/3D của các trang web như vậy nên tôi đã cố gắng làm như sau (đây là một lưới 3x3 2D làm ví dụ, nhưng trong mô phỏng tôi sẽ cần thứ tự> 1000x1000X1000)
lattice = np.empty((3,3), dtype=object)
lattice[:,:] = site(3)
Bây giờ, vấn đề là mỗi điểm mạng tham chiếu đến cùng một trường hợp, ví dụ:
lattice[0,0].set_a(5)
cũng sẽ đặt giá trị của mạng [0,2] .a thành 5. Hành vi này không mong muốn. Để tránh những vấn đề tôi có thể lặp qua mỗi điểm lưới và gán các yếu tố đối tượng bởi yếu tố, như
for i in range(3):
for j in range(3):
lattice[i,j] = site(a)
Nhưng có một cách tốt hơn (không liên quan đến các vòng) để gán đối tượng đến một mảng đa chiều?
Cảm ơn
Nếu bạn đang xử lý một mảng> 1000x1000X1000, _don't_ sử dụng mảng đối tượng !! Nó sẽ sử dụng lượng bộ nhớ khổng lồ so với việc sử dụng một mảng numpy "bình thường". Đối tượng mảng không phải là những gì bạn muốn ở đây ... –
bằng cách mô phỏng tôi đoán bạn có nghĩa là mô phỏng chất lỏng? Nếu có, thì tôi sẽ khuyên bạn nên suy nghĩ lại cách tiếp cận của bạn. Có lẽ các phần tử của mảng của bạn phải là số, vì vậy bạn có thể khai thác tất cả sức mạnh của đại số tuyến tính ;-). Quá trình tuyên truyền và va chạm của hạt phải được thực hiện trên toàn cầu! Không có mạng đối tượng cục bộ nào có thể xử lý trong bất kỳ thời gian tính toán hợp lý nào. Chỉ cần khó khăn, không biết thực sự những gì bạn đang nhắm đến ;-). Cảm ơn – eat
@eat: Tôi đang làm mô phỏng chất lỏng. Tôi muốn mã một mạng lưới chung của các trang web, nơi tất cả các thuộc tính cục bộ được thu thập trong một lớp (va chạm là cục bộ trong cuốn sách của tôi, không phải là tuyên truyền tho), nhưng tôi đoán bạn là đúng sau khi tất cả. Ít nhất bpowah đã dạy tôi cách vector hóa hàm __init__ :) – jonalm