Fahmy Mostafa نشر 22 يوليو 2021 أرسل تقرير نشر 22 يوليو 2021 (معدل) بعد إنشاء مصفوفة Numpy وحفظها كـ Django context variable، أتلقى الخطأ التالي عند تحميل صفحة الويب: array([ 0, 239, 479, 717, 952, 1192, 1432, 1667], dtype=int64) is not JSON serializable ماذا الذي يعنيه هذا الخطأ؟ وهل يجب أن أقوم بتغير نوع المصفوفة من خلال مكتبة json حتى أتمكن من التعامل مع هذا الكائن؟ تم التعديل في 22 يوليو 2021 بواسطة Fahmy Mostafa 1 اقتباس
1 محمد أبو عواد نشر 22 يوليو 2021 أرسل تقرير نشر 22 يوليو 2021 يجب أن تقوم بتحويل المصفوفة الى تنسيق JSON , يمكنك فعل ذلك كالتالي class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.ndarray): return obj.tolist() return json.JSONEncoder.default(self, obj) a = np.array([[1, 2, 3], [4, 5, 6]]) print(a.shape) json_dump = json.dumps({'a': a, 'aa': [2, (2, 3, 4), a], 'bb': [2]}, cls=NumpyEncoder) print(json_dump) وسوف يكون الناتج كالآتي (2, 3) {"a": [[1, 2, 3], [4, 5, 6]], "aa": [2, [2, 3, 4], [[1, 2, 3], [4, 5, 6]]], "bb": [2]} لاستعادتها الى شكل مصفوفة يمكنك استخدام الكود التالي json_load = json.loads(json_dump) a_restored = np.asarray(json_load["a"]) print(a_restored) print(a_restored.shape) سوف يكون شكل الناتج هكذا [[1 2 3] [4 5 6]] (2, 3) 1 اقتباس
1 Ali Haidar Ahmad نشر 22 يوليو 2021 أرسل تقرير نشر 22 يوليو 2021 (معدل) يجب عليك تخزين numpy.ndarray بتنسيق JSON أو أي تركيب من ال nested-list: import json import numpy as np class NumpyEncoder(json.JSONEncoder): # مشفر جيسون خاص للنوع نمباي def default(self, obj): if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): return float(obj) elif isinstance(obj, np.ndarray): return obj.tolist() return json.JSONEncoder.default(self, obj) dumped = json.dumps(data, cls=NumpyEncoder) with open(path, 'w') as f: json.dump(dumped, f) حيث أن JSON هو "Javascript Object Notation" وبالتالي يمكنه فقط تمثيل التركيبات الأساسية من لغة جافا سكريبت: كائنات (مماثلة لل dict ببايثون) ، ومصفوفات (مماثلة لقوائم بيثون) ، وأرقام ، وبيانات بوليانية، وسلاسل ، و nulls. أما المصفوفات Numpy ليست أياً من هذه الأشياء، وبالتالي لا يمكن تحويلها إلى تسلسل "serialised" في JSON. لذلك نلجأ للطريقة السابقة تم التعديل في 22 يوليو 2021 بواسطة Ali Haidar Ahmad 3 اقتباس
0 عبدالله عبدالرحمن11 نشر 22 يوليو 2021 أرسل تقرير نشر 22 يوليو 2021 الخطأ أن المصفوفة ليست JSON لهذا يجب عليك تحويل المصفوفة أولاً جرب استخدام دالة ".tolist ()" في المصفوفة أولاً ، على النحو التالي: import numpy as np import codecs, json a = np.arange(10).reshape(2,5) b = a.tolist() file_path = "/path.json" ## متغير المسار json.dump(b, codecs.open(file_path, 'w', encoding='utf-8'), separators=(',', ':'), sort_keys=True, indent=4) ### هذا يقوم بحفظ المصفوفة على شكل json من أجل إرجاع المصفوفة الى ماكانت عليه ، استخدم: obj_text = codecs.open(file_path, 'r', encoding='utf-8').read() b_new = json.loads(obj_text) a_new = np.array(b_new) 1 اقتباس
السؤال
Fahmy Mostafa
بعد إنشاء مصفوفة Numpy وحفظها كـ Django context variable، أتلقى الخطأ التالي عند تحميل صفحة الويب:
ماذا الذي يعنيه هذا الخطأ؟ وهل يجب أن أقوم بتغير نوع المصفوفة من خلال مكتبة json حتى أتمكن من التعامل مع هذا الكائن؟
تم التعديل في بواسطة Fahmy Mostafa3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.