2014-05-25 9 views
5

मेरे पास छवियों की एक श्रृंखला है, जो एक सीवीएस फ़ाइल में एक स्ट्रिंग प्रति छवि के रूप में संग्रहीत हैं, स्ट्रिंग 9216 स्पेस से अलग पूर्णांक की एक सूची है। मेरे पास एक ऐसा फ़ंक्शन है जो इसे 96x96 numpy सरणी में परिवर्तित करता है।मैं एक पांडा डेटाफ्रेम में ऑब्जेक्ट के रूप में एक numpy सरणी कैसे स्टोर करूं?

मैं इस numpy सरणी को स्ट्रिंग के बजाय अपने डेटाफ्रेम के कॉलम में स्टोर करना चाहता हूं।

हालांकि जब मैं कॉलम से आइटम पुनर्प्राप्त करता हूं तो यह अब एक numpy सरणी के रूप में उपयोग करने योग्य नहीं है।

डेटा से प्रशिक्षण cvs फ़ाइल में अंतिम कॉलम यहां से डाउलोड किया जा सकता है।

https://www.kaggle.com/c/facial-keypoints-detection/data

import pandas as pd 
import numpy as np 

df_train = pandas.read_csv("training.csv") 

def convert_to_np_arr(im_as_str): 
    im = [int(i) for i in im_as_str.split()] 
    im = np.asarray(im) 
    im = im.reshape((96, 96)) 
    return im 

df_train['Im_as_np'] = df_train.Image.apply(convert_to_np_arr) 

im = df_train.Im_as_np[0] 
plt.imshow(im, cmap = cm.Greys_r) 
plt.show() 

, तो इसके बजाय समारोह का उपयोग करने और लागू करने और छवि भंडारण की, मैं अपेक्षा के अनुरूप

import pandas as pd 
import numpy as np 

df_train = pandas.read_csv("training.csv") 

im = df_train.Image[0] 
im = [int(i) for i in im.split()] 
im = np.asarray(im) 
im = im.reshape((96, 96)) 

plt.imshow(im, cmap = cm.Greys_r) 
plt.show() 

उत्तर

1

जिस तरह से आप की दुकान यह सही होना चाहिए कोड सीधे यह काम करता है का उपयोग करें। डेटा तक पहुंचना मुश्किल है। इसके बजाय im=df_train.Im_as_np[0] के डेटा का उपयोग करने ix का उपयोग करें:

im=df_train.ix[0,'Im_as_np'] 
3

पांडा छवियों से निपटने के लिए एक उपयुक्त डेटा संरचना हो जाते हैं नहीं है। आम तौर पर, पांडस के साथ धारणा यह है कि स्तंभों की संख्या पंक्तियों की संख्या से बहुत कम है। यह निश्चित रूप से सत्य होने की आवश्यकता नहीं है, और डेटाफ्रेम के लिए जो दोनों आयामों में छोटे हैं, यह शायद ही कभी मायने रखता है। लेकिन गणितीय परिचालनों के लिए जो स्थानिक अर्थ में प्राकृतिक हैं, डेटाफ्रेम की संबंध संरचना उचित नहीं है, और इससे पता चलता है कि कॉलम की संख्या बढ़ती है। यह देखते हुए, मैं सिर्फ न्यूमपी की सीएसवी-रीडिंग क्षमताओं का उपयोग करने और 2 डी सरणी या छवि ऑब्जेक्ट के रूप में इसके साथ काम करने का सुझाव दूंगा, उदाहरण के साथ scikits.image।

संबंधित मुद्दे