У меня есть матрица. например, матрица 5 x 5
$ cat input.txt
1 5.6 3.4 2.2 -9.99E+10
2 3 2 2 -9.99E+10
2.3 3 7 4.4 5.1
4 5 6 7 8
5 -9.99E+10 9 11 13
Здесь я бы хотел игнорировать значения -9,99E + 10.
Я ищу среднее значение всех записей после деления по диагонали. Вот четыре варианта (использование 999
вместо -9.99E+10
для экономии места на графике c):
![enter image description here](https://i.stack.imgur.com/YLWaF.png)
Я хотел бы усреднить по всем значениям под разными заштрихованными треугольниками. Таким образом, вывод желаемого результата:
$cat outfile.txt
P1U 3.39 (Average of all values of Lower side of Possible 1 without considering -9.99E+10)
P1L 6.88 (Average of all values of Upper side of Possible 1 without considering -9.99E+10)
P2U 4.90
P2L 5.59
P3U 3.31
P3L 6.41
P4U 6.16
P4L 4.16
Трудно разработать правильный алгоритм, чтобы написать его на фортране или в скрипте оболочки. Я думаю о следующем алгоритме, но не могу думать, что будет дальше.
step 1: #Assign -9.99E+10 to the Lower diagonal values of a[ij]
for i in {1..5};do
for j in {1..5};do
a[i,j+1]=-9.99E+10
done
done
step 2: #take the average
sum=0
for i in {1..5};do
for j in {1..5};do
sum=sum+a[i,j]
done
done
printf "%s %5.2f",P1U, sum
step 3: #Assign -9.99E+10 to the upper diagonal values of a[ij]
for i in {1..5};do
for j in {1..5};do
a[i-1,j]=-9.99E+10
done
done
step 4: #take the average
sum=0
for i in {1..5};do
for j in {1..5};do
sum=sum+a[i,j]
done
done
printf "%s %5.2f",P1L,sum