Проблема, с которой вы столкнулись здесь i, что массивы numpy поддерживают только один тип для каждого массива. Когда вы создаете массив y
путем укладки 1D массива поплавков (ваш массив x
) и массив 0D типа '<U2'
, означающий два символа unicode (your array label
), numpy должен опираться на один тип данных. В вашем случае это '<U32'
или 32 символа Unicode.
Глядя на ваш код в IPython показывает это:
In [1]: import numpy as np
In [2]: from random import random
In [3]: x = np.array([random() , random(), random()])
In [4]: x
Out[4]: array([ 0.63426736, 0.79011426, 0.66686608])
In [5]: label = np.array("Ar")
In [6]: label
Out[6]:
array('Ar',
dtype='<U2')
In [7]: y = np.hstack((label,x))
In [8]: y
Out[8]:
array(['Ar', '0.6342673585559033', '0.7901142593791942',
'0.6668660767693766'],
dtype='<U32')
Так путем добавления метки вы неявно преобразованы поплавки в x
для Юникода строк.
Чтобы избежать этого, вы можете управлять меткой и массивом отдельно. Например, вы можете создать кортеж из двух таких элементов:
In [9]: label = "Ar"
In [10]: x = np.random.random(3)
In [11]: ar = (label, x)
In [12]: ar
Out[12]: ('Ar', array([ 0.65850863, 0.89673635, 0.11127903]))
In [13]: ar[1].dtype
Out[13]: dtype('float64')
Надеюсь, это поможет.
Вы упомянули 3D-массив, но ваш пример представляет собой массив 1D. Вы хотите, чтобы метка была первым столбцом каждой строки или меткой для всего массива ND? – Gall
Как вы планируете использовать этот ярлык? Похоже, вы ищете структуру ключевого значения, которая является dictionnary: '' '{'foo': np.random.rand (3)}' '' – Emilien
У меня есть группа из 1d массива и вам нужно сделать некоторые операции над x перед их печатью. – 903124