Multiplicação de Matrizes
Nos últimos dias, ao trabalhar com matrizes, nos deparamos com o ótimo artigo Parallel Matrix Multiplication with the Task Parallel Library (TPL) que mostra comparações entre algoritmos de multiplicação de matrizes. Aproveitamos e incorporamos o mais rápido entre eles (para uma thread), Jagged Optimized, em nosso sistema. Apenas alterando para que aceitasse matrizes de diferentes tamanhos.
///
/// Multiplica a matriz A pela B
///
/// A matriz A
/// A matriz B
/// A matriz produto
public static Matrix operator *(Matrix a, Matrix b)
{
if (a.Cols != b.Rows)
{
throw new ArgumentException(
string.Format(
@"Para a multiplicação de matrizes o número de colunas de A
deve ser igual ao número de linhas de B,
mas C(A) = {0} e L(B) = {1}",
a.Cols, b.Rows));
}
int l = a.Rows;
int c = b.Cols;
int ac = a.Cols;
var r = new Matrix(l, c);
// Altamente otimizado, adaptado de https://web.archive.org/web/20100409071145/innovatian.com/2010/03/parallel-matrix-multiplication-with-the-task-parallel-library-tpl
int i = 0;
do
{
int k = 0;
do
{
int j = 0;
do
{
double[] ri = r._array[i];
ri[j] = (a._array[i][k]*b._array[k][j]) + ri[j];
j++;
} while (j < c);
k++;
} while (k < ac);
i++;
} while (i < l);
return r;
}
Você pode deduzir que a class Matrix possuí internamente um double[][] _array e a construção do número de linhas e colunas são feitas na inicialização da mesma.
Enjoy!!!
Edição em 2022-04-26: O artigo referênciado não existe mais na URL original, e não encontramos para onde tenha mudado... mas existe essa cópia no muito útil web.archive.org. Atualizamos os links para apontar para essa versão salva.
Anteriormente, após cada artigo de nosso blog, havia uma seção de comentários e opções de compartilhamento simples.
Contudo, com a entrada em vigor da LGPD, a coleta de informações pessoais exige consentimento prévio, o que dificulta manter uma interação fluida. Além disso, provedores de comentários e ferramentas de moderação exigem coleta de dados, tornando-nos corresponsáveis ao incorporá-los em nosso site.
Paralelamente, decisões recentes (final de 2024) do STF aumentaram a responsabilidade dos proprietários de sites sobre o conteúdo postado por terceiros, exigindo remoção imediata de conteúdos potencialmente ofensivos, mesmo sem determinação judicial prévia.
Diante desse cenário ruim em termos de Liberdade de Expressão, optamos por encerrar a seção de comentários, visando cumprir a legislação e reduzir riscos operacionais.