Numpy: خطأ هائل جديد في الفهرسة المتقدمة؟

تم إنشاؤها على ٣٠ مارس ٢٠١٧  ·  3تعليقات  ·  مصدر: numpy/numpy

هذا هو الخطأ

train = np.zeros([26,26])
train2 = np.zeros([26,26])
tmp = [1,2,3,4,5,6,1,2,3,4,5,6]
train[tmp[0:-1], tmp[1:]] += 1
for i in range(len(tmp)-1):
    train2[tmp[i], tmp[i+1]] += 1
print(np.sum(train - train2))

الإخراج هو -5
أجد أن train لا يساوي train2 عند وجود بعض المجموعات المكررة في tmp . هل هناك شيء خاطئ في التقطيع المقطوع.

53 - Invalid

التعليق الأكثر فائدة

أنت تعلم أنك تحاول الكتابة إلى "نفس المركز" مرتين ، على سبيل المثال [1, 2] . لسوء الحظ (أو لحسن الحظ ، اعتمادًا على وجهة النظر) هذا لا يعمل.

ولكن يمكنك استخدام np.add.at والذي وفقًا للمستندات "بالنسبة إلى ufunc ، فإن هذه الطريقة تعادل [الفهارس] + = b ، باستثناء أنه يتم تجميع النتائج للعناصر التي تمت فهرستها أكثر من مرة.":

train = np.zeros([26,26])
np.add.at(train, [tmp[:-1], tmp[1:]], 1)

ال 3 كومينتر

المشابه لك.

أنت تعلم أنك تحاول الكتابة إلى "نفس المركز" مرتين ، على سبيل المثال [1, 2] . لسوء الحظ (أو لحسن الحظ ، اعتمادًا على وجهة النظر) هذا لا يعمل.

ولكن يمكنك استخدام np.add.at والذي وفقًا للمستندات "بالنسبة إلى ufunc ، فإن هذه الطريقة تعادل [الفهارس] + = b ، باستثناء أنه يتم تجميع النتائج للعناصر التي تمت فهرستها أكثر من مرة.":

train = np.zeros([26,26])
np.add.at(train, [tmp[:-1], tmp[1:]], 1)

شكرا!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات