2014-11-04 45 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

相关问题