2

У меня есть матрица сказать размера M X N. я должен назвать ту же функцию для каждого столбца в матрице. До сих пор я был , извлекая каждую колонку и вызывая функцию над столбцом итерации до N. т. е. (кол-во столбцов)убыстрены код, который вызывает те же функции снова и снова

Есть ли лучше/быстрее Способ сделать это?

Любая помощь приветствуется. Спасибо

+0

Рассматривали ли вы транспонирования, а затем просто передавая строки? Вы можете увеличить производительность из-за лучшего использования кеша, и вы устраните время, необходимое для извлечения столбца. Но без какого-либо кода, чтобы увидеть, где могут быть другие узкие места, его довольно сложно сказать. – Alejandro

ответ

1

В настоящее время, если вы можете повысить производительность, используя параллельные вычисления.

Процессор многоядерный/многопоточный.

Вы можете использовать, например, поток java 8 и параллельное вычисление.

, например

Matrix Vector Multiplication

@Test 
    2 public static void matrixVectorProduct() { 
    3  System.out.println("Matrix Vector multiplication"); 
    4  final int DIM = 5; 
    5   
    6  int [][]a = new int[DIM][DIM]; 
    7  int counter = 1; 
    8  for (int i = 0; i < a.length; i++) { 
    9   for (int j = 0; j < a[0].length; j++) { 
10    a[i][j] = counter++; 
11   } 
12  } 
13   
14  int []v = new int[DIM]; 
15  Arrays.fill(v, 5);   
16  int []c = new int[DIM]; 
17   
18  IntStream.range(0, c.length) 
19    .parallel() 
20    .forEach((i) -> { 
21     IntStream.range(0, a.length) 
22       .sequential() 
23       .forEach((j) -> { c[i] += v[j] * a[i][j]; }); 
24       }); 
25 
26   
27  int []expected = new int[]{75, 200, 325, 450, 575}; 
28  assertArrayEquals(expected, c); 
29   
30  System.out.println("Matrix-Vector product: " + Arrays.toString(c));   
31 } 
Смежные вопросы