向量
- 线性代数是从研究一个数拓展到一组数
- 一组数的基本表示方法——向量(Vector)
- 向量是线性代数研究的基本元素
- 一组数的作用:最基本的出发点:表示方向
在二维空间中,不同的方向表示不同的终点,比如同样走5000米
它的终点是(4,3)
而它的终点是(4.6,1)
在三维空间中也是如此
在线性代数的世界里,起始点不重要
在这个图中,从(-1,-1)到(3,2)和从(0,0)到(4,3)是一样的。它们只是坐标系不同而已。
为了研究方便,我们定义向量都从原点起始,但是顺序是重要的,很显然(4,3)和(3,4)是不同的。
向量是一组有序的数。
- 如果只是表示方向,最多三个维度就够了,但为了扩展向量所能表达的范围,更加抽象的:n维向量。比如一个房子的维度
面积 卧室 卫生间 最近地铁站(km) 价格(万)
120 3 2 2 666
所以这是一个五维的向量(120,3,2,2,666),此时向量就是一组数,这组数的含义由使用者定义。
- 两个视角看似不同,但可以互相转换,比如房子的这个向量,我们可以想象它是一个五维空间的一个终点。
- 而一个方向就是一个点
- 空间中的一个点,可以看作从原点指向这个点的一个方向
- 在学习初始,使用方向的视角,更直观,更形象。
- 更关键的是:这两个视角,都不是简单的"一组数"
- 一个是一个有向线段
- 一个是空间中的点
更严格一些的定义
- 和向量相对应,一个数字,称为标量
- 代数,用符号代表数。和标量相区别,向量的符号画箭头:
- 个别情况下,尤其是几何学中,我们会考虑向量的起始点
行向量和列向量 (3,4)
通常教材,论文,提到向量,都指列向量。由于横版印刷,使用符号:
,这个T是一个运算符号,把这个向量进行转置的操作。
向量的类,因为向量就是一组数,所以我们用数组来表示。
接口
代码语言:javascript复制public interface Attribute<T extends Number> {
/**
* 向量的长度
* @return
*/
int len();
/**
* 获取向量的元素
* @param index 索引
* @return
*/
T get(int index);
}
实现类
代码语言:javascript复制public class Vector<T extends Number> implements Attribute<T> {
private T[] values;
public Vector(T[] values) {
this.values = values;
}
@Override
public String toString() {
return "Vector{"
"values=" Arrays.toString(values)
'}';
}
@Override
public int len() {
return values.length;
}
@Override
public T get(int index) {
if (index >= len() || index < 0) {
throw new IllegalArgumentException("索引超出范围");
}
return values[index];
}
public static void main(String[] args) {
Attribute<Integer> vector = new Vector<>(new Integer[]{5,2});
System.out.println(vector.toString());
System.out.println(vector.len());
System.out.println(vector.get(0));
}
}
运行结果
代码语言:javascript复制Vector{values=[5, 2]}
2
5