“Клонирование” строки или векторов - столбцов

Иногда полезно "клонировать" строку или вектор - столбец к матрице. Путем клонирования я означаю преобразовывать вектор - строку такой как

[1,2,3]

В матрицу

[[1,2,3]
 [1,2,3]
 [1,2,3]
]

или вектор - столбец такой как

[1
 2
 3
]

в

[[1,1,1]
 [2,2,2]
 [3,3,3]
]

В matlab или октаве это сделано довольно легко:

 x = [1,2,3]
 a = ones(3,1) * x
 a =

    1   2   3
    1   2   3
    1   2   3

 b = (x') * ones(1,3)
 b =

    1   1   1
    2   2   2
    3   3   3

Я хочу повторить это в numpy, но неудачно

In [14]: x = array([1,2,3])
In [14]: ones((3,1)) * x
Out[14]:
array([[ 1.,  2.,  3.],
       [ 1.,  2.,  3.],
       [ 1.,  2.,  3.]])
# so far so good
In [16]: x.transpose() * ones((1,3))
Out[16]: array([[ 1.,  2.,  3.]])
# DAMN
# I end up with 
In [17]: (ones((3,1)) * x).transpose()
Out[17]:
array([[ 1.,  1.,  1.],
       [ 2.,  2.,  2.],
       [ 3.,  3.,  3.]])

Почему первый метод не был (In [16]) работа? Существует ли способ достигнуть этой задачи в Python более изящным способом?

136
задан Neuron 11 November 2019 в 01:53
поделиться

1 ответ

Если Вы имеете кадр данных панд и хотите сохранить dtypes, даже categoricals, это - быстрый способ сделать это:

import numpy as np
import pandas as pd
df = pd.DataFrame({1: [1, 2, 3], 2: [4, 5, 6]})
number_repeats = 50
new_df = df.reindex(np.tile(df.index, number_repeats))
0
ответ дан 23 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: