Умножение матрицы, перемещение трехмерного объекта в Perl - PullRequest
1 голос
/ 28 декабря 2011

Я хочу умножить две матрицы в Perl.1-й {n * 4} со вторым {4 * n}.Я хочу получить значения из текстового файла.мой один текстовый файл выглядит как
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
и другие похожи на следующие
1 0 0 0 0 0 0 0 0 0
1 0 0 0 00 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0

Пожалуйста, помогите мне.Моим основным мотивом является умножение трехмерных координат x, y, x на некоторое значение, чтобы перевести его в другое положение.Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 28 декабря 2011

Использование Math :: Matrix .

Умножает две матрицы, где длина строк в первой матрице равна длине столбцов во второй матрице. Возвращает товар или undef в случае ошибки.

0 голосов
/ 24 апреля 2012

Используйте PDL :: Matrix и rcols

Используйте rcols для чтения в файлах данных столбцов, разделенных пробелами. Например, используя текущий выпуск PDL-2.4.10 через оболочку pdl2, мы демонстрируем:

 pdl> #cat an4.cols;   # this is the [n,4] data file
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

pdl> #cat a4n.cols;   # this is the [4,n] data file
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 

pdl> $a = rcols 'a4n.cols', [];  # read col data into 2-D piddle
Reading data into piddles of type: [ Double ]
Read in 40 elements.

pdl> $b = rcols 'an4.cols', [];  # read col data into 2-D piddle
Reading data into piddles of type: [ Double ]
Read in 36 elements.

pdl> $am = PDL::Matrix->pdl($a); # covert to usual matrix dim order

pdl> $bm = PDL::Matrix->pdl($b); # covert to usual matrix dim order

pdl> p $cm = $am x $bm;          # multiply the two matrices

[
 [10 10 10 10 10 10 10 10 10]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
 [ 0  0  0  0  0  0  0  0  0]
]

pdl> help vars                   # note the dim order change between $a and $am, etc
PDL variables in package main::

Name         Type   Dimension       Flow  State          Mem
----------------------------------------------------------------
$a           Double D [4,10]               VC           0.00KB 
$am          Double D [10,4]               VC           0.00KB PDL::Matrix
$b           Double D [9,4]                VC           0.00KB 
$bm          Double D [4,9]                VC           0.00KB PDL::Matrix
$cm          Double D [10,9]               P            0.70KB PDL::Matrix
$Pi          Double D []                   P            0.01KB 

Примечание: единственная разница между $am и $a состоит в том, что для объектов PDL::Matrix соглашение о порядке размеров для двумерной матрицы обращено по сравнению со стандартным соглашением PDL. Для получения дополнительной информации обо всех вещах PDL перейдите на веб-сайт PDL , где вы найдете ссылки на документацию, архивы списков рассылки и многое другое ...

0 голосов
/ 28 декабря 2011

PDL::Matrix можно использовать:

#!/usr/bin/env perl

use strict;
use warnings;

use PDL;
use PDL::Matrix;

if ( @ARGV != 2 ) {
    die 'Two matrix files are required as arguments';
}

my $index = 0;
my @matrices;
while (<>) {
    push @{ $matrices[$index] }, [ split /\s+/ ];
}
continue { $index++ if eof }

my $matrix_1 = PDL::Matrix->pdl( @{ $matrices[0] } );
my $matrix_2 = PDL::Matrix->pdl( @{ $matrices[1] } );

print $matrix_1 x $matrix_2;
0 голосов
/ 28 декабря 2011

Модуль PDL подходит для матричных вычислений.

...