在 Bash 中用函数计算

问题描述 投票:0回答:0

我在学习 Linux 期间有一个项目任务,并决定制作一个程序来使用线性回归预测数据。该程序使用 Bash,距离完成还很遥远。这是代码示例:

#!/bin/bash

# Variables for data
src="data.csv"

# Read data
IFS='.' readarray -t array < "$src"

# Remove header
unset "array[0]"

# Display content
for item in "${array[@]}"; do
    echo "$item"
done

# Initialize variables x and y
x=()
y=()

# Data separation loop
for i in "${!array[@]}"; do
    row=("${array[$i]}")
    x+=("${row[0]}")
    y+=("${row[1]}")
done

# Calculate mean and standard deviation for x and y
calculate_mean() {
    local data=("${@}")
    local sum=0
    local mean

    for item in "${data[@]}"; do
        sum=$(awk "BEGIN{ sum+=$sum+$item }END{ print sum }")
    done

    mean=$(awk "BEGIN{ print $sum / ${#data[@]} }")
    echo "$mean"
}

calculate_std_deviation() {
    local data=("${@}")
    local mean=$1
    local sum_squares=0
    local variance
    local std_deviation

    for item in "${data[@]}"; do
        sum_squares=$(awk "BEGIN{ sum+=$sum_squares+(diff*diff )} END{ print sum }")
    done

    variance=$(awk  "BEGIN{ print $sum_squares / ${#data[@]} }")
    std_deviation=$(awk "BEGIN{ print sqrt($variance) }")
    echo "$std_deviation"
}

x_mean=$(calculate_mean "${x[@]}")
x_std=$(calculate_std_deviation "${x[@]}" "$x_mean")
y_mean=$(calculate_mean "${y[@]}")
y_std=$(calculate_std_deviation "${y[@]}" "$y_mean")

echo "Mean x: $x_mean"
echo "Standard deviation x: $x_std"
echo "Mean y: $y_mean"
echo "Standard deviation y: $y_std"

当我在 Kali 终端上运行它时,程序在打印数组后停止了。我在尝试解决和弄清楚时感到困惑。我知道这个程序没有显示线性回归的部分,但是这里的问题不能让我继续,而且我还在寻找一种有效且简单的方法来在 Bash 上实现它

我不确定它是什么。我只是希望它显示声明函数的均值和标准差。

bash machine-learning linear-regression
© www.soinside.com 2019 - 2024. All rights reserved.