لست متأكدًا مما إذا كان هذا خطأ أو ميزة ولكن إذا كنت أستخدم:
f_data = np.genfromtxt('file.dat', dtype=None, unpack=True)
حيث file.dat
هو ملف بيانات قياسي به عدة أعمدة (على سبيل المثال: http://pastebin.com/ihEW2dxS) لا يتم نقل النتيجة كما يتوقع المرء أن يكون قد وضع unpack=True
.
على سبيل المثال ، يعمل السطر f_data = np.loadtxt('file.dat', unpack=True)
كما هو متوقع.
يبدو وكأنه خطأ ، ووضع علامة عليه حتى يتم إبلاغه بخلاف ذلك.
لقد حققت في هذا قليلا.
نتيجة كود @ Gabriel-p هي شكل (12 ،) مصفوفة مرنة. يستدعي الكود output.T
عليه ، ولكن نظرًا لأنه بعد واحد ، فهذا أمر غير متاح.
أكبر مشكلة يحددها dtype=None
أنه سيكون مصفوفة مرنة. كل عمود له نوع منفصل مستنتج. إذا أردنا تغيير هذه النتيجة حقًا ، فسيحتاج كل صف إلى نوع منفصل. AFAIK ، الطريقة الوحيدة للقيام بذلك هي الحصول على قائمة أو مجموعة من المصفوفات المتجانسة.
نظرًا لأن numCols << numRows في الملف النصي ، فإن استخدام قائمة أو مجموعة لا ينبغي أن يكون مشكلة كبيرة. إذا تم تنفيذه بهذه الطريقة ، فسيتم فك ضغطه مقابل x, y, z = np.genfromtxt(...)
كما هو محدد في المستندات ، وحل حالة @ Gabriel-p.
ومع ذلك ، فإن genfromtxt
بالفعل أكثر من 600 سطر. أي أفكار؟
لقد تعرضت للعض من هذا أيضًا. لقد قدمت حالة اختبار ، انظر
https://github.com/hsgg/numpy.git
أنا أيضا أختبر هذا. loadtxt
أكثر ذكاءً:
if unpack:
if len(dtype_types) > 1:
# For structured arrays, return an array for each field.
return [X[field] for field in dtype.names]
else:
return X.T
لماذا لا يقوم genfromtxt
بهذا؟
أي تعديل حدث في هذه القضية؟ يبدو أنه لم يتغير منذ 2014.
الاقتراح @ moi90 المقدم قبل عامين صحيح. genfromtxt
يجب أن يفعل نفس الشيء مثل loadtxt
.
أعتقد أنه سيكون من السهل إصلاحه ، لذلك قمت بوضع علامة على المشكلة باعتبارها "مشكلة أولى جيدة".
التعليق الأكثر فائدة
أنا أيضا أختبر هذا.
loadtxt
أكثر ذكاءً:لماذا لا يقوم
genfromtxt
بهذا؟