In [328]: df = pd.DataFrame([[1,2.2],[2, 1.9],[3,2.3]], columns=['zone','score'])
In [329]: df
Out[329]:
zone score
0 1 2.2
1 2 1.9
2 3 2.3
np.outer
ожидает 2 1d массива и говорит, что входы будут сглажены, если они не 1d. Таким образом:
In [330]: np.asarray(df)
Out[330]:
array([[1. , 2.2],
[2. , 1.9],
[3. , 2.3]])
In [331]: np.asarray(df).ravel()
Out[331]: array([1. , 2.2, 2. , 1.9, 3. , 2.3])
In [332]: np.outer(_330, _330)
Out[332]:
array([[1. , 2.2 , 2. , 1.9 , 3. , 2.3 ],
[2.2 , 4.84, 4.4 , 4.18, 6.6 , 5.06],
[2. , 4.4 , 4. , 3.8 , 6. , 4.6 ],
[1.9 , 4.18, 3.8 , 3.61, 5.7 , 4.37],
[3. , 6.6 , 6. , 5.7 , 9. , 6.9 ],
[2.3 , 5.06, 4.6 , 4.37, 6.9 , 5.29]])
Это объясняет, почему ваш outer
имеет в два раза больше строк и столбцов, чем indices
.
numpy
функции ожидают numpy
массивов и преобразуют входы к таким при необходимости. Лучше, если вы сделаете преобразование правильно и с пониманием, перед тем, как делать это.