是否有任何庫函式(Scipy、Numpy、?)可以通過復制值來使陣列大小加倍?像這樣 :
[[1, 2, 4], [[1. 1. 2. 2. 4. 4.]
[5, 6, 2], -> [1. 1. 2. 2. 4. 4.]
[6, 7, 9]] [5. 5. 6. 6. 2. 2.]
[5. 5. 6. 6. 2. 2.]
[6. 6. 7. 7. 9. 9.]
[6. 6. 7. 7. 9. 9.]]
或者有沒有更快的方法來做這個操作?當陣列非常大時,就會出現問題。這就是我到目前為止所擁有的。
def double_array(array):
nbr_rows, nbr_cols = array.shape
array_new = np.zeros((nbr_rows*2, nbr_cols*2))
for row in range(nbr_rows):
for col in range(nbr_cols):
array_new[row*2,col*2] = array[row,col]
array_new[row*2 1,col*2] = array[row,col]
array_new[row*2,col*2 1] = array[row,col]
array_new[row*2 1,col*2 1] = array[row,col]
return array_new
array = np.array([[1, 2, 4], [5, 6, 2], [6, 7, 9]])
array_new = double_array(array)
print(array_new)
uj5u.com熱心網友回復:
根據之前的評論,您可以嘗試np.repeat,例如:
array = np.array([[1, 2, 4], [5, 6, 2], [6, 7, 9]])
new_arr = np.repeat(np.repeat(array,2,axis=1), [2]*len(array), axis=0)
print(new_arr.astype(np.float))
輸出:
[[1. 1. 2. 2. 4. 4.]
[1. 1. 2. 2. 4. 4.]
[5. 5. 6. 6. 2. 2.]
[5. 5. 6. 6. 2. 2.]
[6. 6. 7. 7. 9. 9.]
[6. 6. 7. 7. 9. 9.]]
uj5u.com熱心網友回復:
使用numpy.repeat numpy.tile:
N,M = 2,2 # rows,cols
out = np.repeat(np.tile(array, N), M).reshape(array.shape[0]*N, -1)
輸出:
array([[1, 1, 2, 2, 4, 4],
[1, 1, 2, 2, 4, 4],
[5, 5, 6, 6, 2, 2],
[5, 5, 6, 6, 2, 2],
[6, 6, 7, 7, 9, 9],
[6, 6, 7, 7, 9, 9]])
uj5u.com熱心網友回復:
只需重復一個第二個然后第一個軸:
N = 2
new_arr = a.repeat(N, axis=1).repeat(N, axis=0)
輸出:
>>> new_arr
array([[1, 1, 2, 2, 4, 4],
[1, 1, 2, 2, 4, 4],
[5, 5, 6, 6, 2, 2],
[5, 5, 6, 6, 2, 2],
[6, 6, 7, 7, 9, 9],
[6, 6, 7, 7, 9, 9]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430705.html
下一篇:矩陣預處理的錯誤元組索引超出范圍
