Если бы я дублировал вашу функцию, используя numpy
, я сделал бы это:
import numpy as np
a = np.arange(float(m * n)).reshape(m, n)
def expand_array(a, t):
m, n = a.shape
return np.repeat(a[:, -1], t * n).reshape(m, t * n)
def op_func(a, t):
m, n = a.shape
y = np.zeros((m, n * t))
for i in range(m):
for j in range(n):
y[i, :] = x[i, j]
return y
(expand_array(a, 10) == op_func(a, 10)).all()
Вывод:
True
Однако, как я отметил в комментарии, этоэффективно пропускает каждый столбец, кроме последнего.Поэтому я подозреваю, что вы хотите что-то более похожее на одно из этих двух:
def repeat_expand_array(a, t):
m, n = a.shape
return np.repeat(a, t).reshape(m, t * n)
def tile_expand_array(a, t):
m, n = a.shape
return np.tile(a, t).reshape(m, t * n)
print(repeat_expand_array(a, 3), '\n')
print(tile_expand_array(a, 3))
Вывод:
[[0. 0. 0. 1. 1. 1.]
[2. 2. 2. 3. 3. 3.]
[4. 4. 4. 5. 5. 5.]]
[[0. 1. 0. 1. 0. 1.]
[2. 3. 2. 3. 2. 3.]
[4. 5. 4. 5. 4. 5.]]