1. 什么是向量?
在数学和计算机科学中,向量(Vector)是一个具有大小和方向的量。它可以用来表示空间中的点、方向、位移或任何具有多个分量的数据。
在编程和数据处理中,向量通常表示为有序的数字列表(数组),例如:
# Python 中的向量表示 vector_2d = [3.0, 4.0] # 二维向量 vector_3d = [1.0, 2.0, 3.0] # 三维向量2. 向量的基本运算
2.1 向量加法
两个向量相加,对应分量相加:
def vector_add(v1, v2): return [v1[i] + v2[i] for i in range(len(v1))] 示例 v1 = [1, 2, 3] v2 = [4, 5, 6] result = vector_add(v1, v2) # [5, 7, 9]2.2 向量点积(内积)
点积是两个向量对应分量乘积之和,结果是一个标量:
def dot_product(v1, v2): return sum(v1[i] * v2[i] for i in range(len(v1))) 示例 v1 = [1, 2, 3] v2 = [4, 5, 6] result = dot_product(v1, v2) # 322.3 向量范数(长度)
向量的范数表示其大小,常用欧几里得范数(L2范数):
import math def vector_norm(v): return math.sqrt(sum(x * x for x in v)) 示例 v = [3, 4] length = vector_norm(v) # 5.03. 向量在计算机科学中的应用
3.1 机器学习与向量嵌入
在机器学习中,向量常用于表示数据的特征。词向量(Word Embeddings)将单词映射到高维向量空间:
# 示例:简单的词向量表示 word_vectors = { "king": [0.2, 0.8, -0.3], "queen": [0.3, 0.7, -0.2], "man": [0.1, 0.9, -0.4], "woman": [0.2, 0.8, -0.3] }3.2 图形学与游戏开发
在计算机图形学和游戏开发中,向量用于表示位置、速度、加速度和方向:
class Vector2D: def __init__(self, x, y): self.x = x self.y = y def add(self, other): return Vector2D(self.x + other.x, self.y + other.y) def scale(self, scalar): return Vector2D(self.x * scalar, self.y * scalar) 示例:游戏中的位置移动 position = Vector2D(100, 200) velocity = Vector2D(5, 3) new_position = position.add(velocity) # 移动到新位置3.3 数据库与向量搜索
现代数据库支持向量搜索,用于相似性查找:
-- PostgreSQL 中使用 pgvector 扩展进行向量搜索 CREATE TABLE items ( id SERIAL PRIMARY KEY, name VARCHAR(100), embedding VECTOR(1536) ); -- 查找最相似的物品 SELECT name, embedding <=> '[0.1, 0.2, ...]' AS distance FROM items ORDER BY distance LIMIT 10;4. 向量数据库简介
向量数据库专门用于存储和检索向量数据,支持高效的相似性搜索:
- Pinecone:云原生向量数据库
- Weaviate:开源向量搜索引擎
- Qdrant:Rust 编写的高性能向量数据库
- Milvus:开源向量数据库,支持大规模向量检索
5. 实践建议
- 选择合适的维度:根据应用场景选择向量维度,平衡精度和性能
- 归一化处理:对向量进行归一化可以提高相似性计算的准确性
- 索引优化:对于大规模向量数据,使用合适的索引结构(如 HNSW、IVF)
- 距离度量:根据应用选择合适的距离度量方式(余弦相似度、欧氏距离等)
6. 总结
向量作为表示多维数据的基本工具,在人工智能、数据科学和计算机图形学等领域有着广泛的应用。理解向量的基本概念和运算,掌握向量在具体场景中的应用方法,对于现代软件开发至关重要。