2015-01-28 17 views
8

Tôi muốn thêm (arithmetics) hai lớn System.Array s yếu tố khôn ngoan trong IronPython và lưu trữ kết quả trong mảng đầu tiên như thế này:Cách nhanh nhất để áp dụng phép tính số học để System.Array trong IronPython

for i in range(0:ArrA.Count) : 
     arrA.SetValue(i, arrA.GetValue(i) + arrB.GetValue(i)); 

Tuy nhiên, điều này có vẻ rất chậm. Có nền C tôi muốn sử dụng con trỏ hoặc vòng lặp. Tuy nhiên, tôi không biết làm thế nào tôi nên áp dụng thành ngữ IronPython một cách nhanh chóng. Tôi không thể sử dụng danh sách Python, vì các đối tượng của tôi nghiêm chỉnh từ kiểu System.Array. Kiểu là 3d float.

Cách nhanh nhất/cách nhanh để thực hiện để tính toán tính toán này là gì?

Edit:

  • Số nguyên tố là appr. 256^3.
  • float 3d có nghĩa là mảng có thể được truy cập như thế này: array.GetValue (indexX, indexY, indexZ). Tôi không chắc chắn làm thế nào bộ nhớ tương ứng được tổ chức trong System.Array IronPython của.
  • Thông tin cơ bản: Tôi đã viết giao diện cho một API IronPython, cung cấp quyền truy cập vào dữ liệu trong công cụ phần mềm mô phỏng. Tôi lấy dữ liệu vô hướng 3D và tích lũy nó vào một mảng thời gian trong kịch bản IronPython của tôi. Sự tích lũy được thực hiện 10.000 lần và phải nhanh chóng để mô phỏng không mất nhiều thời gian.
+0

Ông có thể cung cấp bối cảnh nhiều hơn? 3d nổi? Một cấu trúc? Hoạt động thực tế là gì? 3 thêm? Có bao nhiêu phần tử lớn? Tần suất hoạt động xảy ra như thế nào? –

+0

Ngữ cảnh bổ sung được cung cấp. –

Trả lời

0

Có thể sử dụng thư viện gọn gàng được phát triển cho IronPython không?

https://pytools.codeplex.com/wikipage?title=NumPy%20and%20SciPy%20for%20.Net

Nó dường như được hỗ trợ, và như xa như tôi biết là càng gần bạn có thể nhận được trong python để chức năng con trỏ C phong cách với mảng và như vậy.

Tạo một mảng:

x = np.array([[1, 2, 3], [4, 5, 6]], np.int32) 

Multiply tất cả các yếu tố của 3,0:

x *= 3.0 
+0

Thật không may, vì tôi đang giao tiếp với một API, tôi không thể rời khỏi System.Array. Việc chuyển đổi thành dạng đầu tiên sẽ không làm cho nó nhanh hơn, thực sự? –

+0

Bạn có thể thử các phương thức truy cập chung IE 'cho i trong phạm vi (0: ArrA.Count): arrA [i] = arrA [i] + arrB [i]'? Ngoài ra so sánh với đầy đủ về chuyển đổi để numpy, sau đó trở lại mảng. Ai biết? :) – beiller

+0

Các phương pháp truy cập chung không hoạt động trên các mảng 3D. Theo như tôi biết, để chuyển đổi thành numpy tôi phải làm tương tự (vòng lặp đắt tiền thời gian) như được hiển thị trong câu hỏi của tôi. –

Các vấn đề liên quan