【问题标题】:Python NET init a jagged arrayPython NET 初始化一个锯齿状数组
【发布时间】:2019-06-17 19:40:53
【问题描述】:

我想使用 pythonnet 包从 Python 初始化一个 .NET 锯齿状数组。对于一维数组,我可以这样做:

import clr
from System import Array
a = Array[int]([1, 2, 3])

但是我怎样才能为锯齿状数组做到这一点?所以让我们假设我在 python 中有以下列表:

[[1, 2, 3], [4, 5, 6]]

在 C# 中我会这样做:

int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 }};

【问题讨论】:

  • 来自 *Nix 大陆的疯狂猜测:Array[Array[int]]([[1, 2, 3], [4, 5, 6]])
  • 相关:grokbase.com/t/python/ironpython-users/095vyfwt24/… 所以试试:Array[Array[int]]((Array[int]((1,2,3)), (Array[int]((4,5,6)))
  • @juanpa.arrivillaga b = Array[Array[int]]([Array[int]([1,2,3]), Array[int]([4,5,6])]) 有效。但是如何编写一个 python 函数来转换具有 n 维的锯齿状数组?

标签: python .net jagged-arrays python.net


【解决方案1】:

在 Python 中可以这样做:

b = Array[Array[int]]([Array[int]([1,2,3]), Array[int]([4,5,6])])

或者如果你定义了一个辅助函数:

def asnetarray(x, defaulttype):
    if type(x) is list:
        if any([type(xi) is list for xi in x]):
            # Array of array
            return asnetarray([asnetarray(xi, defaulttype) for xi in x], defaulttype)
        elif x:
            # Array
            return Array[type(x[1])](x)
        else:
            # Empty array
            return Array[defaulttype]([])
    else:
        # Single element
        return Array[type(x)]([x])

那么这可以用作:

# int[][]
b = asnetarray([[1, 2], [3, 4]], int)
# int[][][]
c = asnetarray([[[1, 2], [3, 4]], [[5, 6], [7, 8]]], int)

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2014-02-04
    • 2014-05-03
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多