#python #arrays #pandas #string #numpy
Вопрос:
У меня есть массив строк, и я хотел бы взять эти строки и рассматривать их как логические массивы, соответствующие алфавиту (A-Z).
Моя цель состоит в том, чтобы сделать это векторизованным способом и избежать любого зацикливания.
Напр.
Input:
A = np.array(['A'])
B = np.array(['AB'])
C = np.array(['AZ'])
D = np.array(['AZ','BAZ'])
Output:
A = np.array([1,0,0,0,...0])
B = np.array([1,1,0,0,...0])
C = np.array([1,0,0,0,...1])
D = np.array([[1,0,0,0,...1], [1,1,0,0,...1]])
Ответ №1:
map
с MultiLabelBinarizer.transform
Мы можем fit
MultiLabelBinarizer
использовать заглавные буквы из A-Z
, а затем преобразовать массивы A, B, C и D, используя метод преобразования MultiLabelBinarizer
import string
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer().fit([*string.ascii_uppercase])
A, B, C, D = map(mlb.transform, (A, B, C, D))
>>> A
array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0]])
>>> B
array([[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0]])