Храните и восстанавливайте объекты в powershell - PullRequest
0 голосов
/ 18 октября 2018

Я делаю сценарий, в котором я пытаюсь сохранить и восстановить некоторые объекты внутри массива.Но не мог заставить его работать.Кроме того, я не уверен, что если я на правильном пути или есть лучший способ сделать это.На данный момент я пытаюсь сохранить весь объект по частям.

Сеть нейролов имеет информацию и матрицы внутри, эти матрицы имеют 2D массив внутри.

Есть ли способ сохранить всеза один раз, и я делаю это сложным?

Я пробовал некоторые вещи, такие как:

            $this | Export-CSV -Path $Path1
            $this.matrix1 | Export-CSV -Path $Path2
            $this.matrix1.data | % { $_ -join ','} |  out-file $Path3

Но это не дает все данные, которые мне нужно хранить (особенномассив в $ this.matrix1.data) Кто-нибудь знает, что я делаю неправильно, или знает, что лучше?И если да, то как мне вернуть его обратно в $ nn2?

    class Matrix {
        [int]$some_info11
        [int]$some_info21
        [int]$some_info31
        $data
        Matrix($int){
            $this.some_info11 = 1
            $this.some_info21 = 12
            $this.some_info31 = 123

            $row = 4
            $col = 12
            $temp_array = New-Object 'object[,]' $row , $col

            for ($i=0;$i -le $row -1 ; $i++) {
                for ($j=0;$j -le $col -1 ; $j++) {
                    $temp_array[$i,$j] = Get-Random -Maximum 1.0 -Minimum -1.0
                }
            }

            $this.data = $temp_array
        }
    }

    class NeurolNetwork{
        $matrix1
        [int]$some_info1
        [int]$some_info2
        [int]$some_info3

        NeurolNetwork($inp){
            $this.some_info1 = 1
            $this.some_info2 = 12
            $this.some_info3 = 123

            $this.matrix1 = [Matrix]::New($inp)
        }

        export([string]$dir){
            $Path1 = "C:\test\" + $dir + "\nn.txt"
            $Path2 = "C:\test\" + $dir + "\nn_matrix.csv"
            $Path3 = "C:\test\" + $dir + "\nn_matrix_data.csv"

            $this | Export-CSV -Path $Path1
            $this.matrix1 | Export-CSV -Path $Path2
            $this.matrix1.data | % { $_ -join ','} |  out-file $Path3
        }
    }

    Function get_nn([string]$dir){
        # get files from directory and create a new [NeurolNetwork]
    }


    $nn1 = [NeurolNetwork]::New(12)
    $nn1.export("temp_dir")

    $nn2 = get_nn("temp_dir")

1 Ответ

0 голосов
/ 18 октября 2018

кажется, что вы пытаетесь сохранить все в CSV.

CSV не подходят для многомерных массивов, потому что CSV основан на столбцах / строках.

Вероятно, было бы лучше экспортировать в json

$this | ConvertTo-Json | out-file -FilePath C:\TEST.json

output

{
    "matrix1":  {
                "some_info11":  1,
                "some_info21":  12,
                "some_info31":  123,
                "data":  [
                    0.53464436509397073,
                    -0.21887814962252894,
                    -0.999366649426225,
                    0.590662602144602,
                    ALot more rows like this...
                    ]
                },
    "some_info1":  1,
    "some_info2":  12,
    "some_info3":  123
}

Если вы хотите поместить эту информацию обратно в файл, который вы используете.

$Obj = Get-Content -Path C:\Test.json | ConvertFrom-Json
...