otrzymuje dwie tablice, powiedzmyNumpy powtórz dla 2d tablicy
arr = array([10, 24, 24, 24, 1, 21, 1, 21, 0, 0], dtype=int32)
rep = array([3, 2, 2, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
np.repeat (arr, rep) zwraca
array([10, 10, 10, 24, 24, 24, 24], dtype=int32)
Czy istnieje jakiś sposób, aby replikować tej funkcjonalności dla zestawu tablic 2D ?
który jest podany
arr = array([[10, 24, 24, 24, 1, 21, 1, 21, 0, 0],
[10, 24, 24, 1, 21, 1, 21, 32, 0, 0]], dtype=int32)
rep = array([[3, 2, 2, 0, 0, 0, 0, 0, 0, 0],
[2, 2, 2, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)
jest to możliwe, aby utworzyć funkcję, która vectorizes?
PS: Liczba powtórzeń w każdym wierszu nie musi być taka sama. Podaję każdy wiersz wyników, aby upewnić się, że są tego samego rozmiaru.
def repeat2d(arr, rep):
# Find the max length of repetitions in all the rows.
max_len = rep.sum(axis=-1).max()
# Create a common array to hold all results. Since each repeated array will have
# different sizes, some of them are padded with zero.
ret_val = np.empty((arr.shape[0], maxlen))
for i in range(arr.shape[0]):
# Repeated array will not have same num of cols as ret_val.
temp = np.repeat(arr[i], rep[i])
ret_val[i,:temp.size] = temp
return ret_val
Wiem o np.vectorize i wiem, że nie daje żadnych korzyści wydajnościowych w stosunku do normalnej wersji.
Łączna liczba powtórzeń w wierszu nie musi być taka sama. Właśnie dlatego odkrywam maxlen, a następnie dopełniaję każdy rząd, by był tego samego rozmiaru. – Aditya369
A ty dopełniasz losowymi wartościami 'pustymi'? Widziałem ukryte wstawki, które obsługują rzędy o zmiennej długości, ale nie pamiętam szczegółów. – hpaulj
Tak. Wypełniam je losowymi pustymi wartościami. Chociaż wydaje mi się, że bardziej sensowne jest używanie zer w moim przypadku. – Aditya369