【问题标题】:building a matrix composed of alternative object in python在python中构建由替代对象组成的矩阵
【发布时间】:2011-11-26 01:57:51
【问题描述】:

我对 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]])

我不确定如何让它理解我正在使用的类型,我在进行了一些搜索后尝试了各种方法,但似乎没有任何效果。

如何让它将一个区间视为数组/矩阵中的一个元素?

谢谢,

【问题讨论】:

    标签: python arrays matrix numpy


    【解决方案1】:

    来自the docs regarding dtype syntax

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

    因此,要将其指定为数组中的一项,您可以尝试将 dtype 设置为 '(2,)object'

    制作一个 2x2 ndarray:

    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 语法。它太复杂了,偶尔我会看到与使用外来数据类型有关的奇怪错误报告(#1760#1580)。我个人的结论是,坚持简单、简单的 dtype 更安全。或者,如果您需要使用更复杂的 dtype,请对其进行单元测试以确保其行为符合您的预期。


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

    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 你想要什么形状数组,然后,由于 dtype 是 object,你可以将任何你喜欢的东西填充到数组的单元格中。

    此外,与上面的dtype='(2,)object' 解决方案不同,它也适用于一维数组:

    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。我已经编辑了帖子以说明我的意思。
    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多