Насколько я понимаю, вы спросили «не зависящим от языка способом, как вы делаете создание матриц и преобразовывает их в виде входных данных списка или одномерных массивов».
Как правило, большинство языков реализуют массивы и массивы n измерений в качестве простых в использовании заменителей указателей.Вы создаете матрицу, шагая по указателям, представленным массивами, создаете новый элемент, который является результатом желаемого преобразования (умножение в качестве примера), и создаете новую n-мерную матрицу, которая является результатом этого преобразования.На некоторых языках (C, Pascal) вам приходится управлять памятью, выделенной для матрицы.Другие (Perl, Python, Awk, C ++) будут создавать и управлять памятью матрицы на лету.
Если я использую массив в Perl, например:
$i=4;
$array[$i] = 100; # human readable form for ${$ref_to_array}[offset].
$ref_to_array = \@array # ref to the array
print "${$ref_to_array}[$i]\n" # that array, element $i
В C то же самое:
#include <stdio.h>
int array[] = {1,2,3,4,100}; /* const array to avoid malloc for memory */
int *ptr;
int main(void)
{
ptr = &array[0]; /* point to the first element of the array */
int i=4; /* the offset of 100 */
printf("array[%d]=%d\n", i, array[i]); /* prints 100 */
printf("ptr+%d=%d\n", i, *(ptr+i)) ; /* prints 100 */
return 0;
}
Каждый язык будет отличаться в зависимости от того, как выпостроить матрицу из этих входов, хотя C и Perl похожи.
В Perl приведено умножение матрицы:
#!/usr/bin/perl
use strict;
use warnings;
sub foo {
my @rtr;
my ($refa, $refb)=@_;
for(my $i=0; $i<=$#{$refa}; $i++) {
for(my $j=0; $j<=$#{$refb}; $j++) {
$rtr[$i][$j]=$refa->[$i] * $refb->[$j];
}
}
return \@rtr;
}
my @onea = (1, 2, 3);
my @oneb = (4, 5, 6);
my $rtr_ref=foo(\@onea,\@oneb);
for(my $i=0; $i<=$#{$rtr_ref}; $i++) {
for(my $j=0; $j<=$#{@{$rtr_ref}[$i]}; $j++) {
print "$rtr_ref->[$i][$j] ";
}
print "\n";
}
Вывод:
4 5 6
8 10 12
12 15 18
В C алгоритм почти такой же, но все ссылки на указателии разыменования разные.
В заключение - существуют проблемы, делающие это «независимым от языка способом». Ссылка и разыменование указателя отличаются.Управление памятью другое.
Так что выбирайте свой язык, затем сосредоточьтесь на матрице.Для Perl посмотрите на PDL , для C посмотрите на GSL