【问题标题】:Split matrix in javajava中的分割矩阵
【发布时间】:2016-10-29 21:09:16
【问题描述】:

我发现了类似的问题,但不是我想要的。

我需要将一个 1024x1024 的矩阵分成 4 个等份的部分,但是我必须花费每个部分的开头和结尾来在另一个类中使用线程。我考虑过使用两个循环,但我不知道如何正确更改变量的值,因为它超过了最大值。

代码:

private static final int MAX_MATRIX = 1024;
private static final int NUM_THREADS = 4;
int start_row = 0, end_row = 0, start_column = 0, end_column = 0;
for (int i = 0; i < NUM_THREADS/2; i++){
 end_row = start_row + (MAX_MATRIX/2);      
 for (int j = 0; j < (NUM_THREADS/2); j++){
    end_column = start_column + (MAX_MATRIX/2);
    myTask[i] = new TaskAnalyze(start_row, end_row, start_column, end_column, int_radom);
    myThreads[i] = new Thread(myTask[i],"TASK " + i);
 }      
 start_column += MAX_MATRIX/2;      
 start_row += MAX_MATRIX/2; 
}

int_random 是矩阵。

应该有的是:

myTask[0] = new TaskAnalyze(0, 512, 0, 512, int_radom);

myTask[1] = new TaskAnalyze(0, 512, 512, 1024, int_radom);

myTask[2] = new TaskAnalyze(512, 1024, 0, 512, int_radom);

myTask[3] = new TaskAnalyze(512, 1024, 512, 1024, int_radom);

有什么建议吗?

【问题讨论】:

  • 您有一个j 循环,其中不使用j
  • 嗯...我放它是因为它可以帮助更改值,我应该删除它吗?

标签: java multithreading loops matrix division


【解决方案1】:

试试这个:

int MAX_MATRIX = 1024;
int NUM_THREADS = 4;
int start_row = 0, end_row = 0, start_column = 0, end_column = 0;
for (int i = 0; i < NUM_THREADS/2; i++){
    start_row = i*MAX_MATRIX/2;
    end_row = start_row + MAX_MATRIX/2;
    for (int j = 0; j < NUM_THREADS/2; j++){
        start_column = j*MAX_MATRIX/2;
        end_column = start_column + MAX_MATRIX/2;
        System.out.println(start_row + "," + end_row + "," + start_column + "," + end_column);
    }
}

这应该会给你以下输出:

0,512,0,512
0,512,512,1024
512,1024,0,512
512,1024,512,1024

然后您可以将 System.out.println 行替换为您的行:

myTask[i] = new TaskAnalyze(start_row, end_row, start_column, end_column, int_radom);
myThreads[i] = new Thread(myTask[i],"TASK " + i);

【讨论】:

  • 天哪,我没想到会有这种帮助。我会尝试它是否适用于我所拥有的。
  • 非常感谢!它已经解决了大多数错误,但是当我在这个循环之后启动线程时,为什么现在说“NullPointerException”。这个我做,你帮我够了。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2016-01-17
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多