2015-10-14 4 views
1
import numpy as np 
from random import random 
x = np.array([random() , random(), random()]) 
label = np.array("Ar") 
y = np.hstack((label,x)) 
print(y) 

Я хочу, чтобы добавить метку перед массивом Numpy в 3-D, но он не будет возвращать число с плавающейпечати символов в плавающем Numpy массиве

['Ar' '0.' '0.' '0.'] 

Могу ли я переписать массив для хранения плавающее число?

+0

Вы упомянули 3D-массив, но ваш пример представляет собой массив 1D. Вы хотите, чтобы метка была первым столбцом каждой строки или меткой для всего массива ND? – Gall

+1

Как вы планируете использовать этот ярлык? Похоже, вы ищете структуру ключевого значения, которая является dictionnary: '' '{'foo': np.random.rand (3)}' '' – Emilien

+0

У меня есть группа из 1d массива и вам нужно сделать некоторые операции над x перед их печатью. – 903124

ответ

2

Проблема, с которой вы столкнулись здесь 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') 

Надеюсь, это поможет.

Смежные вопросы