2011-11-26 39 views
2

我對python相當陌生,目前我正在使用numPy庫以及pyinterval庫。我想建立一個不是由浮點數組成的矩陣,而是間隔。構建一個由python替代對象組成的矩陣

但是如果我做到以下幾點:

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

我不知道如何得到它明白,我現在用的類型,我已經做了一些搜索,但似乎沒有任何後嘗試過各種東西上班。

我怎樣才能得到它作爲只有一個元素在數組/矩陣?

謝謝

回答

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.

所以將其指定爲一個項目在數組中,你可以嘗試的D型設置爲'(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語法。這太複雜了,偶爾我會看到奇怪的bug報告(#1955,#1760,#1580)與使用異國情調的dtypes有關。我個人的結論是堅持簡單樸素的dtypes是更安全的。或者,如果您需要使用更復雜的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的顯式什麼形狀數組,然後,由於D型是object,你可以的東西什麼你請進入陣列的單元格。

此外,與上述dtype='(2,)object'解決方案,它也適用於一維數組:

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

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

謝謝你,解決它 – user812352

+0

它還是起到了一點奇怪:如果我有以下代碼: BD = [間隔([0,1]),間隔([6,7])] b = np.array(BD,D型細胞= '(2)對象') 我得到: 陣列([[(0.0,1.0 ),(0.0,1.0)], [(6.0,7.0),(6.0,7.0)]],dtype = object) 而不是 array([[interval(0.0,1.0)], [ 7.0)]],dtype = obj ect) 你知道這是爲什麼嗎? – user812352

+0

好點。最後,我終於明白,有一種更簡單的方法來定義數組而不會與'dtype'混淆。我編輯了這篇文章來展示我的意思。 – unutbu

相關問題