简单 Rust 程序,实现两个向量相加

发布: (2026年2月5日 GMT+8 21:20)
3 min read
原文: Dev.to

Source: Dev.to

线性代数是现代计算的支柱。GPU 利用向量相加来计算像素位置和实时 3D 渲染的光照。同样,LLM 将词语表示为高维向量(嵌入),通过数学运算来确定语义关系。

注意: 线性代数很快就会变得抽象。3Blue1Brown 的这段视频是该主题最好的入门之一:
https://www.youtube.com/watch?v=fNk_zzaMoSs&t=309s

Rust 程序:向量相加

use std::io::{self, Write};

fn main() {
    let vec1 = get_vec("Enter first vector (x,y): ");
    let vec2 = get_vec("Enter second vector (x,y): ");
    println!("Result: ({}, {})", vec1.0 + vec2.0, vec1.1 + vec2.1);
}

fn get_vec(msg: &str) -> (f32, f32) {
    print!("{}", msg);
    io::stdout().flush().unwrap();
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
    let coords: Vec = input
        .split(',')
        .map(|s| s.trim().parse().unwrap_or(0.0))
        .collect();
    (coords[0], coords[1])
}

将文件保存为 add_vectors.rs

编译程序

rustc add_vectors.rs

运行程序

./add_vectors

示例交互

Enter first vector (x,y): 1,2
Enter second vector (x,y): 3,-1
Result: (4, 1)

在方格纸上复现此过程可以帮助你直观地看到向量相加的过程,提升理解。

Rust 逐行解析

use std::io::{self, Write};

导入 I/O trait。Write 用于刷新缓冲区,使提示立即显示。

fn main() { ... }

标准入口点,程序从这里开始执行。

let vec1 = ...let vec2 = ...

变量绑定。let 创建不可变绑定,捕获 get_vec 返回的向量。

println!(...)

声明式宏(注意 !),将格式化文本打印到控制台。{} 是值的占位符。

fn get_vec(msg: &str) -> (f32, f32)

函数签名,定义一个返回两个 32 位浮点数元组的辅助函数。

打印提示并立即刷新 stdout,使用户在输入前看到提示。

io::stdin().read_line(&mut input).unwrap();

从标准输入读取一行到可变的 String 中。&mut 让函数可以修改该变量。unwrap() 在读取失败时会 panic。

input.split(',').map(...).collect();

创建一个迭代器,以逗号分割输入,对每段进行修剪、解析为 f32,并收集到 Vec 中。

parse().unwrap_or(0.0)

尝试将修剪后的字符串切片转换为浮点数。如果解析失败,则返回 0.0 而不是 panic。

(coords[0], coords[1])

返回向量的前两个元素,作为表示 (x, y) 坐标的元组。

Back to Blog

相关文章

阅读更多 »

类与继承

!Lahari Tennetihttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads...

JavaScript 对象与方法

什么是对象中的方法?方法是存在于对象内部的函数。可以把对象想象成一个工具箱,方法就是里面的工具。javascript...