在Powershell中存储和恢复对象

时间:2018-10-18 15:03:25

标签: powershell class multidimensional-array store recover

我正在创建一个脚本,试图在其中存储和恢复一些内部数组的对象。 但是无法使其正常工作。 另外,我不确定是否在正确的轨道上,或者有更好的方法可以做到这一点。 此时,我正在尝试将完整的对象分成几部分保存。

神经元网络内部具有信息和矩阵,这些矩阵内部具有2D数组。

是否可以一次性存储所有内容,这会使我变得复杂吗?

我已经尝试过类似的事情:

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

但这并不能获取我需要存储的所有数据 (espacialy $ 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 :(得分:0)

您似乎要尝试将所有内容保存为CSV。

CSV不适用于多维数组,因为CSV基于列/行。

导出到json可能更好

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

输出

{
    "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