У меня есть цифровая матрица, состоящая из 0 и 1. Пример:
p=[[1 0 0 1 0]
[0 0 0 0 0]
...
[1 1 1 1 1]
[0 0 0 1 1]]
Строки этой цифровой матрицы означают разделенные по времени измерения 5-элементных пакетов данных. Каждый столбец обозначает канал измерения:
channels=[A B C D E]
Мне нужно сопоставить каналы с p, чтобы я получил:
q=[[A None None D None]
[None None None None None]
...
[A B C D E]
[None None None D E]]
Какой самый питонический способ сопоставить p с q?






Вы можете использовать комбинацию np.tile , чтобы сначала расширить метки строк, а затем использовать np.where, чтобы выбрать определенные индексы из p или установить результат в None.
import numpy as np
p = np.array(
[[1, 0, 0, 1, 0], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [0, 0, 0, 1, 1]]
)
labels = ["A", "B", "C", "D", "E"]
expanded = np.tile(labels, (len(p), 1))
final = np.where(p, expanded, None)
print(final)
Как отмечает @Mechanic Pig, сама трансляция исправит это, так что вам даже не понадобится np.tile.
@MechanicPig <facepalm> Я начал с другого подхода и закончил этим, но ты абсолютно прав. Это серьезная ошибка, спасибо!
np.where(p, labels, None)достаточно, трансляция numpy справится сlabelsхорошо.