Я пытаюсь повторить numpy поведение в другой библиотеке. Одна из вещей, которой не хватает моей библиотеке - это трансляция поведения. Поведение широковещания для операторов довольно хорошо определено с операторами не-присваивания в numpy, документация с указанием :
При работе с двумя массивами NumPy сравнивает их элементы формы -wise. Он начинается с конечных размеров и продвигается вперед. Два измерения совместимы, когда
- равны или
- одно из них равно 1
Легко для a * b, но что о a * = b или a [:] = b? Похоже, что назначение в numpy соответствует некоторым правилам вещания, ie:
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
a = a.reshape(3,1,1,3)
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = b.reshape(1,1,3,3)
c = a * b # works!
a *= b # fails, non-broadcastable output operand with shape (1,1,3,3) doesn't match the broadcast shape (3,1,1,3)
a[:] = b #fails, could not broadcast input array from shape (1,1,3,3) into to shape (3,1,1,3)
b[:,:,:] = a[1,0,0,:] # works!
Теперь я могу интуитивно понять некоторые правила, почему это не будет смысл для некоторых из этих заданий. Проблема в том, что я не вижу ни одного набора правил, регулирующего вещание при назначении в целом. Я предполагаю, что это как-то связано с соответствием формы выходного местоположения, хотя даже этот logi c не удался в последнем рабочем примере (где они этого не сделали). Самая близкая вещь, которую я могу найти, - это один оператор в документе (выделение мое):
Как уже упоминалось, можно выбрать подмножество массива для назначения с использованием одного индекс, срезы и массивы индекса и маски. Значение, присваиваемое индексированному массиву, должно быть согласованным по форме ( такой же формы или передаваться в форму, которую индекс создает ). Например, разрешено присваивать константу срезу:
Какое здесь определение "форму к вещанию"?