我尝试重复数组中的最后一列(numpy)。我想知道是否有更多的优雅"比调整数组大小,复制值并重复最后一行x次。
Input Array: Output Array:
[[1,2,3], [[1,2,3,3,3],
[0,0,0], -> repeat(2-times) -> [0,0,0,0,0],
[0,2,1]] [0,2,1,1,1]]
x = np.array([[1,2,3],[0,0,0],[0,2,1]])
# to repeat last row two times two times
new_size = x.shape[1] + 2
new_x = np.zeros((3,new_size))
new_x[:,:3] = x
for i in range(x.shape[1],new_size):
new_x[:,i] = x[:,-1]
有没有办法用numpy repeat函数解决这个问题? 或者更短或更高效的东西?
答案 0 :(得分:4)
一种可能的解决方案:
a = np.hstack((arr, np.tile(arr[:, [-1]], 2)))
print (a)
[[1 2 3 3 3]
[0 0 0 0 0]
[0 2 1 1 1]]
答案 1 :(得分:1)
使用numpy.repeat()
:
np.repeat(a, [1]*(a.shape[1]-1) +[3], axis=1)
答案 2 :(得分:1)
广播通常很有效。
import numpy as np
A = np.random.randint(0, 100, (1000, 1000))
np.hstack((A, np.broadcast_to(A[:, -1][:, None], (A.shape[1], n))))
如果性能问题,则进行一些基准测试:
n = 1000
%timeit np.hstack((A, np.broadcast_to(A[:, -1][:, None], (A.shape[1], n)))) # 3.06 ms
%timeit np.hstack((A, np.tile(A[:, [-1]], n))) # 9.33 ms
%timeit np.repeat(A, [1]*(A.shape[1]-1) +[n], axis=1) # 12.9 ms