приведение numpy к типу без явного цикла

#python #numpy #types

#python #numpy #типы

Вопрос:

У меня есть данные в одной большой матрице, и я хочу преобразовать их в специальный dtype. Как я могу это сделать, не прибегая по умолчанию к пониманию списка (это действительно медленно). Вот глупый способ сделать это:

 dt = np.dtype([
    ('id', np.uint32, 1),
    ('val', np.float64, 2)])

untyped = np.array([[1,1.1,1.11], [2, 2.2,2.22]])

typed = np.array([(x[0], (x[1:])) for x in untyped], dtype=dt)
assert typed.shape==(2,)
assert typed.dtype==dt
  

Спасибо!

Редактировать: лучше, но все еще не так элегантно, как хотелось бы:

 typed = np.zeros(len(untyped),dtype=dt)
typed['id'] = untyped[0]
typed['val'][:,0] = untyped[1]
typed['val'][:,1] = untyped[2]
  

Комментарии:

1. Вы могли бы определить typed массив правильной формы и dtype и присвоить ему 2 поля.

2. Вы можете немного упростить назначение с помощью typed['val'] = untyped[:,1;] .

3. Я думаю, вы имеете в виду нетипизированный[:,1:]