如何从向量的java向量创建矩阵(多维向量)

时间:2014-07-04 14:41:56

标签: java vector

我试图在java中创建Vector(2d)的向量,就像多维数组一样。然后将值分配给该矩阵中的特定位置,就像我们在2D数组中使用matrix [i] [j]所做的那样 任何帮助。

我的数据在一个Vector中 向量n = [a,b,c,d,e,f,g,h]

所以我想创建2D Vector来表示 vector m =

  • a b c d
  • e f g h

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法创建2D矢量:

Vector<Vector<Integer>> vector2D = new Vector<Vector<Integer>>(10);

这将创建一个大小为10的Vector,它将包含具有整数(向量)值的向量。 在特定索引处设置值之前,需要创建一个整数向量并设置在行位置(在您的情况下为2)。

vector2D.add(2, new Vector<Integer>(10));

然后,您可以使用以下语法在列索引处设置值:

Vector<Integer> rowVector = vector2D.get(2);
rowVector.add(3, 5);

这里我们首先在索引2处获得整数向量(向量)。然后在整数向量(向量)中的索引3处添加值。

希望这能解释。

答案 1 :(得分:0)

无论出于何种原因,几分钟前SO 提出了您的问题。到 2021 年,您可能不会再使用 Vector,而是使用 List。实际上,它们都有 subList(start,end) 方法(即使在 Java 7 中链接指向的内容也是如此),因此实际上您只需按行大小的步骤循环遍历 vector/list 并使用此方法。
此外,您可能喜欢使用流,因此流收集器会为您完成此操作,而不是在单独的行中初始化结果变量:

List<Integer> vector=Arrays.asList(1,2,3,4,5,6,7,8);
int rowSize=4;
List<List<Integer>> matrix=IntStream.range(0, vector.size()/rowSize)
        .mapToObj(row->vector.subList(row*rowSize, (row+1)*rowSize))
        .collect(Collectors.toList());
System.out.println(matrix);

将输出[[1, 2, 3, 4], [5, 6, 7, 8]]

此外,由于 Vector 可以从 List 构造,毕竟您也可以这样做:

Vector<Integer> vector=new Vector<Integer>(Arrays.asList(1,2,3,4,5,6,7,8));
int rowSize=4;
Vector<Vector<Integer>> matrix=new Vector<Vector<Integer>>(
        IntStream.range(0, vector.size()/rowSize)
        .mapToObj(row->new Vector<Integer>(vector.subList(row*rowSize, (row+1)*rowSize)))
        .collect(Collectors.toList()));
System.out.println(matrix);

当然,在后台,它们的作用与 for 循环几乎相同:

Vector<Integer> vector=new Vector<Integer>(Arrays.asList(1,2,3,4,5,6,7,8));
int rowSize=4;
Vector<Vector<Integer>> matrix=new Vector<Vector<Integer>>();
for(int row=0;row<vector.size()/rowSize;row++)
    matrix.add(new Vector<Integer>(vector.subList(row*rowSize, (row+1)*rowSize)));
System.out.println(matrix);