Amer Abdallah نشر 4 أغسطس 2021 أرسل تقرير نشر 4 أغسطس 2021 أود تحويل مصفوفة Numpy إلى متجه وحدة unit vector. وبشكل أكثر تحديدًا ، أنا أبحث عن إصدار مكافئ للدالة التالية: def normalize(v): norm = np.linalg.norm(v) if norm == 0: return v return v / norm هل هناك شيء من هذا القبيل في numpy؟ 1 اقتباس
1 Ali Haidar Ahmad نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 أولاً يجب أن نفهم المشكلة. ال unit vector أو متجه الوحدة هو متجه طويلته (magnitude) تساوي ال 1. وبالتالي فإن الشعاع التالي لايمثل متجه وحدة: import numpy as np # تعريف الشعاع التالي v = np.array([1,3]) # حساب الطويلة np.linalg.norm(v) #3.1622776601683795 # إذاً ليس متجه وحدة حيث أن التابع np.linalg.norm(x) يقوم بحساب الطويلة للشعاع. الآن إذا أردنا أن نقوم بتحويل هذا الشعاع إلى متجه وحدة فيجب أن نقوم بعملية normalizing. رياضياً فإنه لتحويل أي شعاع إلى شعاع وحدة يجب أن نقوم بقسمة جميع عناصره على طويلته، أي لتحويل الشعاع السابق يجب أن نقوم بقسمة قيمه على 3.16227766. import numpy as np v = np.array([1,3]) magnitude =np.linalg.norm(v) # نقسم كل عنصر على الطويلة v=v/magnitude # نختبر إذا أصبح متجه وحدة np.linalg.norm(v) # 1.0 # نجحنا حسناً إذا أردت أن لاتستخدم np.linalg.norm(v) يمكنك استخدام الصيغة التالية، فكما نعلم أن الطويلة هي الجذر التربيعي لمجموع مربعات قيم الشعاع: import numpy as np v = np.array([1,3,5,6,33]) magnitude =np.sqrt(np.sum(v**2)) # نقسم كل عنصر على الطويلة v=v/magnitude # نختبر إذا أصبح متجه وحدة np.linalg.norm(v) # 1.0 # نجحنا كما ويمكنك استخدام مكتبة Sklearn حيث تحتوي على طرق فعالة متاحة للمعالجة المسبقة للبيانات وأدوات التعلم الآلي الأخرى. عادةً ما يستخدم التابع normalize في هذه المكتبة مع المصفوفات ثنائية الأبعاد وتوفر خيار تسوية L1 و L2. سنستخدم في الكود التالي هذه التابع مع مصفوفة 1D حيث سنقوم باستخدام الدالة ravel لتسطيح المصفوفة : import numpy as np from sklearn.preprocessing import normalize v = np.array([1,3,5,6,33]) v = normalize(v[:,np.newaxis], axis=0).ravel() # نختبر إذا أصبح متجه وحدة np.linalg.norm(v) # 1.0 # نجحنا ,وأخيراً يمكنك استخدام الدالة الجاهزة لتحويل الشعاع إلى شعاع وحدة بشكل مباشر من خلال المكتبة transformations: # لتحميلها : pip install transformations import numpy as np import transformations as trafo v = np.array([1,3,5,6,33]) unit_v = trafo.unit_vector(data, axis=1) # نختبر إذا أصبح متجه وحدة np.linalg.norm(unit_v) # 1.0 2 اقتباس
0 عبدالله عبدالرحمن11 نشر 4 أغسطس 2021 أرسل تقرير نشر 4 أغسطس 2021 إذا كنت تستخدم scikit-learn فيمكنك استخدام import numpy as np from sklearn.preprocessing import normalize x = np.random.rand(1000)*10 norm1 = x / np.linalg.norm(x) norm2 = normalize(x[:,np.newaxis], axis=0).ravel() print np.all(norm1 == norm2) # True صائب 1 اقتباس
0 Ali Haidar Ahmad نشر 4 أغسطس 2021 أرسل تقرير نشر 4 أغسطس 2021 (معدل) . تم التعديل في 5 أغسطس 2021 بواسطة Ali Haidar Ahmad اقتباس
0 Wael Aljamal نشر 5 أغسطس 2021 أرسل تقرير نشر 5 أغسطس 2021 كطريقة ثانية، يمكن تقسم الشعاع vector (المصفوفة الأحادية) على طولها import numpy as np normalized_v = v / np.sqrt(np.sum(v**2)) حيث تم حساب الطول (جذر مجموع مربعات قيم الشعاع) 1 اقتباس
السؤال
Amer Abdallah
أود تحويل مصفوفة Numpy إلى متجه وحدة unit vector. وبشكل أكثر تحديدًا ، أنا أبحث عن إصدار مكافئ للدالة التالية:
هل هناك شيء من هذا القبيل في numpy؟
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.