2014-11-04 43 views
2

如果我有一個像在numpy中實例化結構化dtype的語法是什麼?

foo = dtype([('chrom1', '<f4', (100,)), ('chrom2', '<f4', (13,))]) 

一個D型我怎樣才能創建一個D類的一個實例,作爲一個標量。

背景,如果有一個更好的辦法:

我想直接有效的標量代表映射陣列在基因組的基礎上,通過染色體染色體。我不想要這些基因組數組的數組,每一個都只是一個結構化的標量集,我想通過名稱/位置來引用,並且能夠添加/減去/ etc。

看來,dtype.type()也許是前進的路徑,但我還沒有找到有用的文檔,以正確調用此功能呢。

所以假設我有:

chrom1_array = numpy.arange(100) 
chrom2_array = numpy.arange(13) 
genomic_array = foo.type([chrom1_array, chrom2_array]) 

最後一行是不對的,但希望它傳達什麼我目前嘗試。

這是一個可怕的想法?如果是這樣,什麼是正確的想法?如果沒有,那麼實施它的正確方法是什麼?

這類作品,但可怕的:

bar = np.zeros(1, dtype=[('chrom1', 'f4', 100), ('chrom2', 'f4', 13)])[0] 
+0

我認爲你可以得到的最接近的是 「標量陣列」:'欄= NP。數組((chrom1_array,chrom2_array),dtype = foo)'。 'bar'是一個形狀爲'()'的數組。 – 2014-11-05 00:21:00

+0

這些「genomic_array」有多少?你在做什麼樣的數學運算?到目前爲止,您的描述不適合使用結構化數組。多維數組是您高效運算的最佳選擇,而類/對象最適合定義複雜對象。 – hpaulj 2014-11-05 05:47:13

回答

1

試試這個:

foo = np.dtype([('chrom1', '<f4', (100,)), ('chrom2', '<f4', (13,))]) 
t = np.zeros((), dtype=foo) 
+0

啊!我沒有意識到你可以將空元組作爲一個形狀。很酷,謝謝。 – traeki 2014-11-05 05:38:15

+0

然後,您可以用't ['chrom1'] = chrom1_array'填充值。或者你可以創建並填寫一個步驟:'t1 = np.array((chrom1_array,chrom2_array),dtype = foo)'。 – hpaulj 2014-11-05 08:01:13

+1

但這個'標量'數組有多有用?比'd = {'chrom1':chrom1_array,'chrom2':chrom2_array}'多或少有用嗎? – hpaulj 2014-11-05 08:06:33

相關問題