it-swarm.asia

كيفية تحويل مجموعة منطقية إلى مجموعة int

أستخدم Scilab وأريد تحويل مجموعة من المنطقية إلى مجموعة من الأعداد الصحيحة:

>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)

في Scilab يمكنني استخدام:

>>> bool2s(y)
0.    0.    1.    1.  

أو حتى اضربه في 1:

>>> 1*y
0.    0.    1.    1.  

هل هناك أمر بسيط لهذا في بيثون ، أو هل يجب علي استخدام حلقة؟

89
Kwolf

تحتوي الصفائف Numpy على طريقة astype. فقط افعل y.astype(int).

لاحظ أنه قد لا يكون من الضروري القيام بذلك ، بناءً على ما تستخدمه للصفيف. سيتم تشغيل Bool تلقائيًا للتشغيل في العديد من الحالات ، بحيث يمكنك إضافته إلى المصفوفات int دون الحاجة إلى تحويله بشكل صريح:

>>> x
array([ True, False,  True], dtype=bool)
>>> x + [1, 2, 3]
array([2, 2, 4])
119
BrenBarn

تعمل طريقة 1*y في Numpy أيضًا:

>>> import numpy as np
>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)
>>> 1*y                      # Method 1
array([0, 0, 1, 1])
>>> y.astype(int)            # Method 2
array([0, 0, 1, 1]) 

إذا كنت تسأل عن طريقة لتحويل قوائم Python من Boolean إلى int ، يمكنك استخدام map للقيام بذلك:

>>> testList = [False, False,  True,  True]
>>> map(lambda x: 1 if x else 0, testList)
[0, 0, 1, 1]
>>> map(int, testList)
[0, 0, 1, 1]

أو باستخدام فهم القائمة:

>>> testList
[False, False, True, True]
>>> [int(elem) for elem in testList]
[0, 0, 1, 1]
38
Sukrit Kalra

باستخدام numpy ، يمكنك القيام بما يلي:

y = x.astype(int)

إذا كنت تستخدم صفيفًا غير رديء ، فيمكنك استخدام قائمة الفهم :

y = [int(val) for val in x]
15
cjm

معظم الوقت لا تحتاج إلى تحويل:

>>>array([True,True,False,False]) + array([1,2,3,4])
array([2, 3, 3, 4])

الطريقة الصحيحة للقيام بذلك هي:

yourArray.astype(int)

أو

yourArray.astype(float)
9
Gioelelm

أعلم أنك طلبت حلولًا غير متكررة ، لكن الحلول الوحيدة التي يمكنني التوصل إليها ربما تكون داخليًا على أي حال:

map(int,y)

أو:

[i*1 for i in y]

أو:

import numpy
y=numpy.array(y)
y*1
3
bsoist