2014-11-04 4 views
2

Если у меня есть DTYPE какКаков синтаксис для создания структурированного dtype в numpy?

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

Как я могу создать экземпляр этого DTYPE, как скаляр.

фона, в случае Там есть лучший способ:

Я хочу, чтобы эффективно представлять массивы отображения скаляров непосредственно к базам в геноме, хромосомы по хромосоме. Я не хочу массивов этих геномных массивов, каждый из них представляет собой просто структурированный набор скаляров, который я хочу ссылаться по имени/позиции, и иметь возможность добавлять/вычитать/и т. Д.

Похоже, что 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

Я думаю, что ближайший вы можете получить, что является «скалярным массив»: 'бар = пр. array ((chrom1_array, chrom2_array), dtype = foo) '. 'bar' - массив с формой'() '. –

+0

Сколько из этих «genomic_array» есть? Какие математические операции вы делаете с ними? До сих пор ваше описание не является хорошим примером использования структурированных массивов. Многомерные массивы - ваш лучший выбор для эффективной математики, а класс/объекты лучше всего подходят для определения сложных объектов. – hpaulj

ответ

1

попробовать это:

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

Ах! Я не понимал, что вы можете передать пустой кортеж как форму. Хорошо, спасибо. – traeki

+0

Затем вы можете заполнить значения с помощью 't ['chrom1'] = chrom1_array'. Или вы можете создать и заполнить один шаг: 't1 = np.array ((chrom1_array, chrom2_array), dtype = foo)'. – hpaulj

+1

Но насколько полезен этот «скалярный» массив? Более или менее полезно, чем 'd = {'chrom1': chrom1_array, 'chrom2': chrom2_array}'? – hpaulj