在python中构建由可选对象组成的矩阵

在python中构建由可选对象组成的矩阵,python,arrays,matrix,numpy,Python,Arrays,Matrix,Numpy,我是python的新手,目前正在使用numPy库和pyinterval库。我想构建一个矩阵,它不是由浮动组成的,而是由间隔组成的 但是,如果我执行以下操作: A = [[interval([2,3]), interval([0,1]), interval([1,2]), interval([2,3])]] m = np.matrix(A,interval) 它给出了以下错误: raise ValueError, "matrix must be 2-dimensional" 为了了解它是如何工

我是python的新手,目前正在使用numPy库和pyinterval库。我想构建一个矩阵,它不是由浮动组成的,而是由间隔组成的

但是,如果我执行以下操作:

A = [[interval([2,3]), interval([0,1]), interval([1,2]), interval([2,3])]]
m = np.matrix(A,interval)
它给出了以下错误:

raise ValueError, "matrix must be 2-dimensional"
为了了解它是如何工作的,我看了以下内容:

np.array(A)
并得到以下输出:

array([[[[ 2.,  3.]],
    [[ 0.,  1.]],
    [[ 1.,  2.]],
    [[ 2.,  3.]]]])
当我想看到这样的东西时:

array([[interval(2,3), interval[0,1],
       [interval(1,2), interval[2,3]])
我不知道如何让它理解我正在使用的类型,在做了一些搜索之后,我尝试了各种方法,但似乎没有任何效果

我如何才能让它将一个间隔看作数组/矩阵中的一个元素

谢谢,

发件人:

每个类型说明符可以以重复编号或 形状。在这些情况下,将创建一个数组元素,即数组 记录在案。该数组仍被称为单个字段

因此,要将其指定为数组中的一项,可以尝试将数据类型设置为
”(2,)object“

要制作2x2 Ndaray,请执行以下操作:

import interval
A = [(interval.interval([2,3]), interval.interval([0,1])),
     (interval.interval([1,2]), interval.interval([2,3]))]
a = np.array(A,dtype='(2,)object')
要制作2x2矩阵,请执行以下操作:

m=np.matrix(A,dtype='(2,)object')
警告:我不太懂dtype语法。它太复杂了,有时我会看到奇怪的bug报告(,)与使用外来数据类型有关。我个人的结论是,坚持简单明了的数据类型更安全。或者,如果需要使用更复杂的数据类型,可以对其进行单元测试,以确保其行为符合预期


定义数组的一种更简单、更好的方法是:

A = [(interval.interval([2,3]), interval.interval([0,1])),
     (interval.interval([1,2]), interval.interval([2,3]))]
a = np.empty((2,2),dtype='object')
a[:]=A
这会明确地告诉numpy您想要什么形状的数组,然后,由于数据类型是
object
,因此您可以将任意内容填充到数组的单元格中

此外,与上面的
dtype=”(2,)对象“
解决方案不同,它也适用于1D数组:

bd = [interval.interval([0,1]),
      interval.interval([6,7])]

b = np.empty(2,dtype='object')
b[:]=bd

它的行为仍然有点奇怪:如果我有以下代码:bd=[interval([0,1]),interval([6,7])]b=np.array(bd,dtype='(2,)object'),我得到:array([[(0.0,1.0),(0.0,1.0)],[(6.0,7.0),(6.0,7.0)],dtype=object而不是array([[interval(0.0,1.0)],[(6.0,7.0)],dtype=object你知道这是为什么吗?好的一点。我终于明白了,有一种更简单的方法可以定义数组,而不必处理
dtype
。我编辑了这篇文章来表达我的意思。