【问题标题】:why can't using variable in php-ml least square?为什么不能在 php-ml 最小二乘中使用变量?
【发布时间】:2020-09-17 23:48:20
【问题描述】:

php-ml 循环变量中的哪里总是错误 array_unshift 像这样:

Fatal error: Uncaught TypeError: array_unshift() expects parameter 1 to be array, string given in C:\xampp\htdocs\prediksi\assets\main system\vendor\php-ai\php-ml\src\Phpml\Regression\LeastSquares.php:100 Stack trace: #0 C:\xampp\htdocs\prediksi\assets\main system\vendor\php-ai\php-ml\src\Phpml\Regression\LeastSquares.php(100): array_unshift('[2018, 1, 1], [...', 1) #1 C:\xampp\htdocs\prediksi\assets\main system\vendor\php-ai\php-ml\src\Phpml\Regression\LeastSquares.php(81): Phpml\Regression\LeastSquares->getSamplesMatrix() #2 C:\xampp\htdocs\prediksi\assets\main system\vendor\php-ai\php-ml\src\Phpml\Regression\LeastSquares.php(42): Phpml\Regression\LeastSquares->computeCoefficients() #3 C:\xampp\htdocs\prediksi\admin\modul\show_predict.php(40): Phpml\Regression\LeastSquares->train(Array, Array) #4 C:\xampp\htdocs\prediksi\admin\index.php(85): require('C:\\xampp\\htdocs...') #5 {main} thrown in C:\xampp\htdocs\prediksi\assets\main system\vendor\php-ai\php-ml\src\Phpml\Regression\LeastSquares.php on line 100

为什么会这样?

有我的循环代码:

$query1 = "SELECT * FROM master_data";

$result1 = mysqli_query($conn, $query1);

$data1 = "";

while($row1 = mysqli_fetch_array($result1)){
    $TH=number_clean($row1['TH']);
    $B=$row1['B'];

$data1 .= "[".$row1["T"].", ".$B.", ".$TH."], ";

}

$data1 = substr($data1, 0, -2);

$query2 = "SELECT * from master_data";

$result2 = mysqli_query($conn, $query2);

$data2 = "";

while($row2 = mysqli_fetch_array($result2)){

  $data2 .= "".$row2["Penjualan"].", ";

}

$data2 = substr($data2, 0, -2); 

$tgl=$_POST['tgl'];
$dat1=$_POST['data1'];
$dat2=$_POST['data2'];

$samples = [$dat1];
$targets = [$dat2];

$regression = new LeastSquares();
$regression->train($samples, $targets);
$result = round($regression->predict([$t, $b, $th]));
echo $t."<br>";
echo $b."<br>";
echo $th."<br>";
echo $result."<br>";

结果是我的问题

当我使用手册时(一一插入)它可以工作

为什么会这样?

【问题讨论】:

  • 原因就在错误中:当 array_unshift 函数需要一个数组时,您正在为它提供一个字符串
  • 我必须怎么做才能清除错误?
  • 循环数组还是什么?我对此感到困惑
  • 把代码贴到你调用array_unshift()的地方
  • 三思而后行。最初,您显示的代码不包括错误消息的来源。然后您发布附加代码作为答案而不是编辑您的原始帖子(在更多人反对之前删除该答案),现在您添加附加代码作为评论而不是将其添加到原始帖子中。你让人们很难帮助你。另外,看看如何将字符串添加到数组中,以及之后如何将数组转换为字符串。这将使您的代码更易于阅读,并避免您必须删除最后一个逗号。

标签: php php-ml


【解决方案1】:

问题是当您调用 array_unshift 时,您传递的是字符串,而不是变量。查看您的功能,您应该将其更改为:

private function getSamplesMatrix() { 
    $samples = []; 
    array_unshift($samples, 1); 
    return new Matrix($samples); 
} 

删除 foreach 循环。

但是,当您在空数组上执行 array_unshift 时,我对您的代码感到困惑。您可以通过以下方式实现相同的目标:

$samples = array(1);

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多