Cách kinh điển để nhận ma trận cứng nhắc như một đối số cho hàm C có con trỏ kép là gì?Cách thích hợp để đúc numpy.matrix thành con trỏ kép
Context: Tôi đang sử dụng numpy
để xác nhận một số mã C-to wit, tôi có một hàm C mà phải mất một const double ** const
, và tôi đang sử dụng ctypes
gọi .so
từ Python.
Tôi đã thử:
func.argtypes = ctypeslib.ndpointer(dtype=double, ndim=2, flags="C_CONTIGUOUS")
và thông qua ma trận numpy
trực tiếp (không làm việc), cũng như
func.argtypes = ctypes.POINTER(ctypes.POINTER(ctypes.c_double))
và sau đó thông qua ma trận numpy
qua dàn diễn viên khác nhau. Đúc dẫn đến lỗi Python
TypeError: _type_ must have storage info
Note: Câu hỏi này đã đưa ra một vài năm trước đây here, nhưng không có độ phân giải hoàn toàn thành công.
mảng cố định lý tưởng là một phần bộ nhớ liền kề, được lập chỉ mục như 'A [i, j] = A [i * n_columns + j]', không phải mảng 1D chứa con trỏ tới mảng tăng gấp đôi, vì vậy không có giải pháp dễ dàng. Bạn cần phải xây dựng mảng 1D của con trỏ tới mỗi hàng theo cách thủ công. –
@ RobertT.McGibbon: Bạn muốn chuyển câu trả lời này để chúng tôi có thể đóng câu hỏi? – user14717
Ngoài ra còn có một cuộc thảo luận rất đầy đủ về chủ đề này trên danh sách gửi thư gắt gỏng: http://mail.scipy.org/pipermail/numpy-discussion/2015-January/071957.html –