如何将 150 1536 孔板中的值压缩为 perl 中每个坐标的一个值
我有 150 个 32 x 48 的值矩阵,代表酵母平板图像的颜色强度。我想以每个板的坐标(x,y)为例生成一个平均值,然后从中创建一个新板。现在,我的文件中的所有值均采用以下格式:
EA_D01_5-8 30,22 -0.397914165526517
EA_D01_5-8 30,23 -0.326759277147352
EA_D01_5-8 31,22 -0.172657520010773
EA_D01_5-8 31,23 -0.103405885199075
第一组代表车牌名称,第二组代表 x,y 坐标,第三组代表 z 分数值。
while($line = <DATAFILE>){
chomp($line);
my @temp = split(/\t/, $line);
$long_name = $temp[0];
$coords = $temp[1];
$zscores = $temp[2];
$stats{$long_name}{$coords}[0] = $zscores;
}
我创建了一个哈希 $stats{$long_name}{$coords}[0] 来存储值 然后我创建了一个循环来尝试访问这些值:
foreach $long_name ( sort keys %stats ) {
foreach $coords( keys %{$stats{$long_name}} ){
my $zscoreV = $stats{$long_name}{$coords}[0];
$totalV = $totalV + $zscoreV;
}
}
但是我做错了一些事情,因为当我尝试将总数除以 150(即 $long_name 中唯一值的数量)时,我没有剩下 1536 个值。有谁知道我做错了什么?谢谢
I have 150 32 by 48 matrices of values that represent color intensities from images of yeast plates. I would like to take for example coordinate (x,y) from each plate generate an average and then create a new plate out of that. Right now I have all of the values in a file in the following format:
EA_D01_5-8 30,22 -0.397914165526517
EA_D01_5-8 30,23 -0.326759277147352
EA_D01_5-8 31,22 -0.172657520010773
EA_D01_5-8 31,23 -0.103405885199075
The first group represents the plate name the second the x,y coordinates and the third the z-score value.
while($line = <DATAFILE>){
chomp($line);
my @temp = split(/\t/, $line);
$long_name = $temp[0];
$coords = $temp[1];
$zscores = $temp[2];
$stats{$long_name}{$coords}[0] = $zscores;
}
I have created a hash $stats{$long_name}{$coords}[0] to store the values
I then created a loop to try to gain access to those values:
foreach $long_name ( sort keys %stats ) {
foreach $coords( keys %{$stats{$long_name}} ){
my $zscoreV = $stats{$long_name}{$coords}[0];
$totalV = $totalV + $zscoreV;
}
}
However I am doing something wrong because when I try to divide the total by 150 being the number of unique values in $long_name I am not left with 1536 values. Does anyone know what I am doing wrong? Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
也许我误解了你想要的。我认为你想要一个“平均”板,其中 0,0 是所有 150 个板的 0,0 值的平均值,0,1 是 0,1 值的平均值,等等。
如果是这样,你就不需要想要一个长名称的散列,你只需要一个坐标的散列:(
假设任意数量的车牌;如果你总是想假设 150 个车牌,你可以这样做
$coords_average{$coords} += $zscores / 150;
在初始循环中。)Maybe I'm misunderstanding what you want. I think you want an "average" plate, where 0,0 has the average of the 0,0 values of all 150 plates, 0,1 has the average of the 0,1 values, etc.
If so, you don't want a hash by long name, you want just a hash by coords:
(Assuming an arbitrary number of plates; if you always want to assume 150 plates, you can just do
$coords_average{$coords} += $zscores / 150;
in the initial loop.)