#python #arrays #numpy
Вопрос:
Вопрос:
Предположим, у меня есть вектор (массив) 5 x 1, и я хочу создать квадратную матрицу, вычислив A*A^T, которая должна выглядеть следующим образом:
[[ 1 2 3 4 5],
[ 2 4 6 8 10],
[ 3 6 9 12 15],
[ 4 8 12 16 20],
[ 5 10 15 20 25]]
если массив является
[1, 2, 3, 4, 5]
Есть ли способ сделать то же самое, что и выше, но если значения в массиве являются строками, а не целыми числами? Так, например,
['a', 'e', 'i', 'o', 'u']
.
Ожидаемые результаты будут следующими
[[ 'aa' 'ae' 'ai' 'ao' 'au'],
[ 'ea' 'ee' 'ei' 'eo' 'eu'],
[ 'ia' 'ie' 'ii' 'io' 'iu'],
[ 'oa' 'oe' 'oi' 'oo' 'ou'],
[ 'ua' 'ue' 'ui' 'uo' 'uu']]
Комментарии:
1. Каков ожидаемый результат?
2.
np.tensordot
есть несколько примеров работы с массивом строк типа dtype объекта. Но для строкastr*n
(с целым числом n) является повторением иastr1 astr2
является соединением. Никакая другая «математика» для строк не определена.3. @Corralien только что опубликовал ожидаемый результат
Ответ №1:
Для массива dtype объекта мы можем воспользоваться оператором сложения строк:
In [204]: x = np.array(['a','b','c'], object)
In [205]: np.add.outer(x,x)
Out[205]:
array([['aa', 'ab', 'ac'],
['ba', 'bb', 'bc'],
['ca', 'cb', 'cc']], dtype=object)
In [206]: x[:,None] x
Out[206]:
array([['aa', 'ab', 'ac'],
['ba', 'bb', 'bc'],
['ca', 'cb', 'cc']], dtype=object)
Математика в массивах типов dtype объектов делегирует действие методам объектов. Таким образом, он ограничен собственными методами объекта. Для строк определяется простое сложение, как и умножение на целое число.