سؤال

وأنا جديدة على بيثون ونمباي، وأواجه مشكلة، وهذا لا أستطيع تعديل numpy.recarray، عند تطبيق لملثمين وجهات النظر. قرأت recarray من ملف، ثم إنشاء وجهات النظر ملثمين، ثم محاولة تعديل القيم في لحلقة. هنا هو رمز المثال.

import numpy as np
import matplotlib.mlab as mlab


dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01


for d in dat[m_Obsr][m_ZeroScale]:
    d.scale_mean = 1.0

ولكن عند طباعة نتيجة

newFile = args[0] + ".no-zero-scale"

mlab.rec2csv(dat[m_Obsr][m_ZeroScale], newFile, delimiter=' ')

جميع scale_means في ملفات، لا تزال الصفر.

لا بد لي من أن تفعل شيئا خاطئا. هل هناك طريقة السليمة لتعديل قيم رأي؟ هل لأنني تطبيق وجهات النظر واحدا تلو الآخر؟

وشكرا لكم.

هل كانت مفيدة؟

المحلول

وأعتقد أن لديك فكرة خاطئة في هذا المصطلح "وجهات النظر ملثمين"، وينبغي أن (إعادة) قراءة و كتاب (والآن للتحميل مجانا) لتوضيح فهمك.

وأنا أقتبس من القسم 3.4.2:

<اقتباس فقرة>   

ويتم تشغيل اختيار متقدمة عندما   الكائن الاختيار، الكائنات، هو   غير الصفوف (tuple) وجوه التسلسل، وهو ndarray   (من عدد صحيح أو منطقي نوع البيانات)، أو   الصفوف (tuple) مع تسلسل واحد على الأقل   الكائن أو ndarray (من نوع البيانات   صحيح أو منطقي). هناك نوعان   الفهرسة المتقدمة: صحيح و   منطقية. اختيار متقدمة دائما   إرجاع نسخة من البيانات (على النقيض من   مع تشريح الأساسية التي تقوم بإرجاع   عرض).

ما تفعلونه هنا هو اختيار المتقدمة (من النوع منطقي) لذلك كنت الحصول على نسخة وأبدا ملزم في أي مكان - إجراء التغييرات على نسخة وبعد ذلك فقط ندعه يذهب بعيدا، ثم إرسال نسخة جديدة جديدة من النص الأصلي.

وبمجرد فهم المسألة ينبغي أن يكون الحل بسيط: جعل نسختك مرة واحدة، وجعل التغييرات على هذه النسخة، وإرسال تلك النسخة نفسها. أي بمعنى:.

dat = mlab.csv2rec(args[0], delimiter=' ')
m_Obsr = dat.is_observed == 1
m_ZeroScale = dat[m_Obsr].scale_mean < 0.01
the_copy = dat[m_Obsr][m_ZeroScale]

for d in the_copy:
    d.scale_mean = 1.0

newFile = args[0] + ".no-zero-scale"
mlab.rec2csv(the_copy, newFile, delimiter=' ')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top