【发布时间】:2020-10-06 18:36:51
【问题描述】:
我正在尝试将 2D f64 向量 (Vec
我不完全确定如何为这样的事情发布一个最小的工作示例,但我们开始吧:
extern "C" {
fn fortran1_(
vector: *mut f64,
length1: *const uint32_t
);
fn fortran2_(
vector: *mut f64,
length1: *const uint32_t,
length2: *const uint32_t
);
}
pub fn fortran1(
length1: u32
) -> Vec<f64>{
let mut vector = vec![0_f64; length1];
unsafe{
fortran1_(
vector.as_mut_ptr(),
&length1)
}
return vector;
}
pub fn fortran2(
length1: u32,
length2: u32
)-> Vec<Vec<f64>>{
let mut vector = vec![vec![0_f64; length1]; length2];
unsafe{
fortran2_(vector.as_mut_ptr(),
&length1,
&length2)
}
return vector;
}
谢谢
【问题讨论】:
-
我强烈建议使用一维数组,并像使用它是多维的,或者使用
ndarraylibrary。Vec不会内联存储其元素,这意味着虽然来自每个内部数组的数据 是连续的,但内部数组彼此不连续。换句话说,您无法通过索引或指针算术获得第二个向量,因为没有一致的步幅模式。