2011-10-07 22 views
14

Tôi đang sử dụng khá nhiều thư viện fortran để thực hiện một số phép tính toán học. Vì vậy, tất cả các mảng trong nhu cầu cần phải là Fortran-tiếp giáp.
Hiện tại tôi thực hiện điều này với numpy.asfortranarray().Làm thế nào để buộc thứ tự mảng numpy để phong cách fortran?

Câu hỏi của tôi là:

  1. Đây có phải là một cách nhanh chóng nói với NumPy rằng mảng sẽ được lưu trữ trong phong cách fortran hoặc là có một ai nhanh hơn?
  2. Có khả năng thiết lập một số cờ sần sờ, sao cho mọi mảng được tạo theo kiểu fortran?

Trả lời

11

Sử dụng thứ tự đối số tùy chọn = 'F' (mặc định 'C'), khi tạo các đối tượng numpy.array. Đây là cách tôi làm điều đó, có thể làm điều tương tự mà bạn đang làm. Về số 2, tôi không biết thiết lập thứ tự mặc định, nhưng thật dễ dàng để chỉ bao gồm đối số tùy chọn thứ tự khi tạo mảng.

5

Về câu hỏi 2: bạn có thể lo ngại về việc giữ lại thứ tự Fortran sau khi thực hiện các phép biến đổi và hoạt động mảng. Tôi đã có một vấn đề tương tự với endianness. Tôi đã tải một mảng nguyên bản lớn từ tệp, nhưng khi tôi áp dụng một phép biến đổi nhật ký, mảng kết quả sẽ là một phần nhỏ. Tôi nhận được xung quanh vấn đề bằng cách đầu tiên phân bổ một mảng lớn về cuối nhỏ thứ hai, sau đó thực hiện một bản ghi tại chỗ:

b=np.zeros(a.shape,dtype=a.dtype) 
np.log10(1+100*a,b) 

Trong trường hợp của bạn, bạn sẽ phân bổ b với trật tự Fortran.

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