Rust中向二维Vec推送f64值报错:f64无push方法
问题分析与解决
错误原因
你遇到的f64类型未找到名为push的方法错误,根源在于这行代码:
result[i][0].push(sum);
- 索引空Vec会直接崩溃:初始时
result是一个空的二维Vec,result[i]根本不存在,直接索引会触发panic。 - 调用对象错误:就算
result[i][0]存在,它的类型是f64(浮点数),而push是Vec类型的方法,浮点数没有这个方法。
正确的实现方式
要把sum推送到二维Vecresult中,你需要先把sum包装成一个一维Vec,再将这个一维Vec添加到result里。另外,你的求和逻辑看起来像是矩阵乘法的错误实现(当前是加法,矩阵乘法应该是a[i][j] * b[j][0]),这里也一起修正了,如果你的需求确实是加法,可以改回去。
修正后的完整代码:
// Dense matrices with Vec>. Indexing, bounds, numeric types. math Vec fn main() { let m_a: Vec<Vec<f64>> = Vec::from([Vec::from([1.0, 2.0, 3.0]), Vec::from([4.0, 5.0, 6.0])]); let m_b: Vec<Vec<f64>> = Vec::from([Vec::from([7.0]), Vec::from([8.0]), Vec::from([9.0])]); matrix_vec(m_a, m_b); } fn matrix_vec(a: Vec<Vec<f64>>, b: Vec<Vec<f64>>) { let mut result: Vec<Vec<f64>> = Vec::new(); let mut sum = 0.0; for i in 0..a.len() { for j in 0..a[i].len() { // 修正为矩阵乘法的求和逻辑,若需求是加法可改回 + sum += a[i][j] * b[j][0]; } // 将sum包装成一维Vec,再推送到result中 result.push(vec![sum]); sum = 0.0; } println!(" result - {:?}", result); }
关键修改点
- 移除错误的
result[i][0].push(sum),替换为result.push(vec![sum]):先创建包含sum的子Vec,再将整个子Vec添加到二维Vec的末尾。 - 修正了求和逻辑(如果你的作业是矩阵向量乘法的话),如果实际需求是元素相加,可以把
*改回+。
内容的提问来源于stack exchange,提问作者ahmadzafarjs
相关产品推荐
相关产品推荐

