【问题标题】:2d Array: Changing Elements Perl二维数组:改变元素 Perl
【发布时间】:2013-08-12 09:52:47
【问题描述】:

我在 Perl 中有一个二维数组。我将数组传递给一个子程序,我想修改二维数组的所有元素,然后返回它并打印数组。到目前为止,我已将我的代码附在下面。我遇到的问题实际上是更改每个单独的元素并将数组传递给子例程。

原始矩阵+代码

       x            y       z
CG  -3.74900 -4.89100 -3.45400 
OD1 -6.45900 -6.29100 -6.08000 
OD2 -1.31600 -1.83300 -0.17600   

sub translateMatrixOperation
{
my (@translatematrix, $x, $y, $z) = @_;
print "PRINTING FIRST\n";
my $arrsize = scalar @translatematrix;
for(my $i = 0; $i <= $arrsize; $i++)
{
    for(my $j = 0; $j <= $arrsize; $j++)
    {
        if ($j == 0)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
            $_ = $_ - $x;
        }
        elsif ($j == 1)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
           $_ = $_ - $y;
        }
        elsif ($j == 2)
        {
            print "[$i][$j]:$translatematrix[$i][$j]\n";
            $_ = $_ - $z;
        }
    }
}
print "PRINTING\n";
for(my $i = 0; $i <= $arrsize; $i++)
{
    for(my $j = 0; $j <= $arrsize; $j++)
    {
        print "$translatematrix[$i][$j] ";
    }
    print "\n";
}
# return (\@translatematrix);

} 我想通过向 x 值添加一个常数值、向 y 值添加一个常数值以及向 z 值添加一个常数来编辑整个数组。我哪里做错了?

【问题讨论】:

  • 关于样式,for(my $i = 0; $i &lt;= $arrsize; $i++) 通常写成for my $i (0 .. $#arr) 代表@arr 数组
  • 你考虑过使用PDL吗?应该使矩阵运算变得非常容易。

标签: perl multidimensional-array


【解决方案1】:
my (@translatematrix, $x, $y, $z) = @_;

没有意义,因为@translatematrix 会吞食@_ 中的所有元素,应该是:

my ($translatematrix, $x, $y, $z) = @_;

$translatematrix 是数组引用。

        $_ = $_ - $x;

应该更像

$translatematrix->[$i][$j] -= $x;

还应应用与$y$z 类似的逻辑。

【讨论】:

  • 这项技术有效,但它阻止我使用当前计算长度的方法。如何计算数组的长度?
  • @user2657817 您可以更改参数顺序,即。 my ($x, $y, $z, @translatematrix) = @_; 所以数组是最后一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多