gpt4 book ai didi

Java 通用矩阵创建

转载 作者:行者123 更新时间:2023-12-02 11:30:46 25 4
gpt4 key购买 nike

我想在java中创建一个通用类型矩阵,其尺寸大小将是随机的。

解决这个问题的最佳方法是什么?

最佳答案

在 Java 中创建矩阵并不像 R、Matlab、甚至 C 那样友好。Java 非常强大的类型范式意味着一切都必须定义或初始化。所以你不能简单地做 Integers[x][y][z]。除了数组的数组之外,事情变得很复杂。

不同之处在于,在+x、-x、+y、-y、+z、-z 中移动的规则矩阵本质上都是等价的。然而,在 Java 中,如果您想考虑矩阵的三个维度,它们是有方向的。这意味着您必须遍历 X,然后遍历 Y,然后遍历 Z,始终按此顺序。要移动 x+1,您必须向下返回 z、向下返回 y,然后移动您的 x 位置,然后转身再次遍历 y 和 z。我不确定这是否有意义。但这就是我必须如何考虑 Java 中的矩阵,否则我就会开始犯编码错误。

有一些 Java 库专注于创建矩阵。你可以去那里看看。 http://ejml.org/wiki/index.php?title=Main_Page

仅仅创建一个随机数组数组(如上所述的伪矩阵)总体来说似乎并不难。

import java.util.Random;

public class Rand
{
public static void main(String[] args)
{
Random random = new Random();
int dim1 = random.nextInt( 10 );
int dim2 = random.nextInt( 10 );
int dim3 = random.nextInt( 10 );

int[][][] matrix = new int[dim1][dim2][];

//use dim 3 when you do the specific the declaration for the 3rd dimension

}

}

快速运行一些示例 - Int myIntArray = new int[15];创建一个包含 15 个成员的 int 数组,初始化为该类型的默认值,对于
为 0 //--赋值 myIntArray[2] = 5; //= 0 0 5 0 0 myInt = myIntArray[2]; myInt = 5;

// @Initializing with values

int[5] myIntArray = { 5, 10, 15, 20, 25 };
int[] myIntArray = { 5, 10, 15, 20, 25 };

多维数组不像C中的矩阵。所有维度都是相同的类型。每个元素都是一个独立的数组。前一个维度的每个数组元素都是一个数组。所有维度都具有相同的类型,并且每个元素都是一个独立的数组。在 Java 中,多维数组中的每个数组元素(除了最后一个维度是一个数组,而不是单个元素 //两个暗淡数组

  int[][] myIntArray2;
//Or
int myIntArray[][];

使用new运算符进行分配。Allocation初始化为DEFault类型。在这种情况下,您正在初始化数组的数组,因此 DEFault类型为空。

  int[][] myIntArray2d = new int[5][];
myIntArray2d[3] = new int[5];

因此分配上面的数组,你会得到

  null Null 0 Null Null
[] [] 0 [] []
[] [] 0 [] []
[] [] 0 [] []
[] [] 0 [] []

第一个维度为空,默认为 null - 默认数组类型。第二个维度必须在访问之前初始化。

  char[][] charArray = new char[36][];

//But I cant save anything into

charArray[4][0];

//because it has not been initialized with a separate new statement.
//This is why you leave the 3rd dim off until later.

char[5] = new char[5]; // WRONG
char[] f = new char[5];
//Now I can follow that with
charArray[5][5] = 'a';
//or from about
intArray[5][5][5]= 3;
// But you cant declare the final dimension until later.

int[3][] arr = ( { 1, 2, 3 }, { 1, 2 }, { 5, 10, 15, 20 });
//is an array[2] with 3 arrays
int[][] arr = { 1, 2, 3 }, { 1, 2 }, { 5, 10, 15, 20 };
//is an array[2] with 3 arrays

这就是为什么你不能在 Java 中真正做矩阵。因为每个最终尺寸在技术上可能会有所不同。

将数组复制到变量时 - 即

  charArrayvars = charArray[5]
int[] Copies= { 0, 0, 0, 0, 0 } //as a pointer not the data.

// This means that
int[3] ArrayA = { 1, 2, 3 };
Int[3] ArrayB = { 4, 5, 6 };
ArrayB = Array A;

//So ArrayB now references Array A.
//Now if I set

ArrayA[0] = 0; //then
if( ArrayB[0] = 0 && ArrayA==ArrayB.){}
// The logic comparator really just shows they use the same reference.

我想我会评估你的目标并看看是否有其他方法。或者也许使用图书馆。因为像你想的那样的矩阵不是 Java 原生的。有很多奇怪的行为,我对它们的解释做得很糟糕。

关于Java 通用矩阵创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com