Comment convertir un tableau Numpy 2D avec un objet type dtype en un tableau 2D régulier de flotteurs
Dans le cadre du programme général, je travaille, je me suis retrouvé avec des tableaux d'objets, avec des cordes, des coordonnées 3D et etc le tout mélangé. Je sais tableaux d'objets, peut-être pas très favori dans la comparaison à des tableaux, mais je suis l'espoir de contourner ce problème sans changer beaucoup de codes.
Permet de supposer chaque ligne de mon tableau obj_array (avec N lignes) a format de
Single entry/object of obj_array: ['NAME',[10.0,20.0,30.0],....]
Maintenant, je suis en train de charger ce tableau d'objets et émincez les coordonnées 3D morceau. Jusqu'ici, tout fonctionne bien avec simplement à poser permet de dire pour .
obj_array[:,[1,2,3]]
Cependant, le résultat est également un objet de tableau et je ferai face à problème comme je veux créer un tableau 2D de flotteurs avec:
size [N,3] of N rows and 3 entries of X,Y,Z coordinates
Pour l'instant, je suis en boucle sur les lignes et l'affectation de chaque ligne à une ligne d'une destination 2D flot tableau de contourner le problème. Je me demande si il ya une meilleure façon avec l'ensemble des outils de conversion de numpy ? J'ai essayé quelques petites choses et ne pouvait pas obtenir autour d'elle.
Centers = np.zeros([N,3])
for row in range(obj_array.shape[0]):
Centers[row,:] = obj_array[row,1]
Grâce
source d'informationauteur Moe
Vous devez vous connecter pour publier un commentaire.
Méchant petit problème... j'ai été faire les fous avec ce jouet exemple:
Ma première intuition était:
Mais qui garde le
object
dtype, donc peut-être alors:Vous pouvez normalement le travail autour de ce procédant de la manière suivante:
Pas ici, mais qui était un peu déroutant. Apparemment, c'est le fait que les objets de votre tableau sont des listes qui en jette, comme le fait de remplacer les listes les tuples les œuvres:
Car il ne semble pas être une solution pleinement satisfaisante, le plus simple est probablement d'aller avec:
Bien que ce ne sera pas très efficace, probablement mieux d'aller avec quelque chose comme:
Basé sur Jaime jouet pour exemple, je pense que vous pouvez le faire très simplement en utilisant
np.vstack()
:Cela fonctionne indépendamment du fait que le "numérique" d'éléments dans votre tableau d'objets sont 1D numpy tableaux, listes, tuples.
Vous pouvez utiliser des array, de sorte que lorsque vous avez besoin pour accéder aux noms et les valeurs de manière indépendante, vous pouvez facilement le faire. Dans cet exemple, il y a deux points de données:
le résultat:
Voir plus de détails: http://docs.scipy.org/doc/numpy/user/basics.rec.html
Cela fonctionne très bien travailler sur votre tableau arr pour convertir à partir d'un objet d'un tableau de float. Nombre de traitement est extrêmement facile après. Merci pour ce dernier message!!!! J'ai juste modifié de façon à inclure toute DataFrame taille:
C'est la façon la plus rapide de convertir votre objet tableau NumPy float array:
arr=np.array(arr, dtype=[('O', np.float)]).astype(np.float)
- à partir de là, pas de boucle, index, il comme vous le feriez normalement sur un tableau NumPy. Vous auriez à le faire dans les morceaux mais avec vos différents types de donnéesarr[:, 1]
arr[:,2]
etc. Eu le même problème avec un NumPy tuple objet retourné à partir d'une DLL C++ la fonction de conversion pour 17M éléments prend <2s.Ce problème se produit généralement lorsque vous avez un ensemble de données de différents types, généralement, les dates dans la première colonne.
Ce que j'utilise pour faire, est de stocker de la colonne de date dans une variable différente; et de prendre le reste de la "X la matrice des fonctionnalités" dans X. Alors, j'ai les dates et X, par exemple.
J'applique ensuite la conversion à l'X de la matrice:
X = np.array(list(X[:,:]), dtype=np.float)
L'espoir de vous aider!