You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中向二维Vec推送f64值报错:f64无push方法

问题分析与解决

错误原因

你遇到的f64类型未找到名为push的方法错误,根源在于这行代码:

result[i][0].push(sum);
  1. 索引空Vec会直接崩溃:初始时result是一个空的二维Vec,result[i]根本不存在,直接索引会触发panic。
  2. 调用对象错误:就算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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 18:44:50