اذهب إلى المحتوى

السؤال

نشر

تحويل قائمة بايثون إلى مصفوفة باستخدام مكتبة numpy يجعل من المصفوفة المولدة من نوع object كالتالي:

v = [[1], [1, 2]]
np.array(v)
>>> array([[1], [1, 2]], dtype=object)

وعندما أحاول أن أجبرها على تعيين نوع معين كالتالي:

np.array(v, dtype=np.int32)

يظهر لي الخطأ التالي:

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.

ما هي الطريقة التي تمكني من تحويل المصفوفة إلى نوع int32 بدون مشكلة؟

Recommended Posts

  • 1
نشر

يمكنك أن تقوم بملئ الفراغات في المصفوفة من خلال دالة zip_longest من مكتبة itertools كالتالي:

import itertools
np.array(list(itertools.zip_longest(*v, fillvalue=0))).T

"""
Output:

array([[1, 0],
       [1, 2]])
       
"""

بهذه الطريقة يمكنك أن تقوم بمليء المصفوفة بقيمة إفتراضية (صفر في هذه الحالة) في الأجزاء الناقصة.

ملاحظة: إن كنت تستعمل Python الإصدار 2 فسيكون اسم الدالة هو izip_longest وليس zip_longest

  • 1
نشر (معدل)

حسب اعتقادي فإن مصفوفات نمباي تتعامل مع بيانات المصفوفات الغير متجانسة ك "object" ولايمكنها التعامل معها ك int أو أي نمط آخر، لذا فالحل الوحيد هو حشر قيم في مصفوفتك (أصفار مثلاً)، ويمكنك القيام بذلك من خلال التابع pad_sequences كالتالي:

import numpy as np
v = [[1], [1, 2]]
from keras import preprocessing
maxlen=2
v=preprocessing.sequence.pad_sequences(v, maxlen=maxlen)
print(v.dtype) # int32
v
"""
array([[0, 1],
       [1, 2]])
"""

 

تم التعديل في بواسطة Ali Haidar Ahmad

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...