我对 python 相当陌生,目前正在使用 numPy 库和 pyinterval 库。我想构建一个不是由 float 组成的矩阵,而是由间隔组成的矩阵。
但是如果我执行以下操作:
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]])
我不确定如何让它理解我正在使用的类型,在进行一些搜索后我尝试了各种方法,但似乎没有任何效果。
如何才能将一个区间视为数组/矩阵中的一个元素?
谢谢,
最佳答案
来自the docs regarding dtype syntax :
each type specifier can be prefixed with a repetition number, or a shape. In these cases an array element is created, i.e., an array within a record. That array is still referred to as a single field.
因此,要将其指定为数组中的一项,您可以尝试将 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 语法。它太复杂了,有时我会看到与使用外来数据类型相关的奇怪错误报告( #1955 、 #1760 、 #1580 )。我个人的结论是,坚持使用简单的数据类型更安全。或者,如果您需要使用更复杂的数据类型,请对其进行单元测试以确保其行为符合您的预期。
定义数组的更简单、更好的方法是:
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,)object'
解决方案不同,它也适用于一维数组:
bd = [interval.interval([0,1]),
interval.interval([6,7])]
b = np.empty(2,dtype='object')
b[:]=bd
关于python - 在Python中构建由替代对象组成的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275746/