Я читал где-то еще, что вы можете попробовать - поймать java.lang.OutOfMemoryError и в блоке catch вы можете освободить все ресурсы, которые, как вы знаете, могут использовать много памяти, тесные соединения и т. д., затем выполните System.gc () затем повторите попытку, что бы вы не сделали.
Другой способ заключается в том, что, хотя я не знаю, будет ли это работать, но в настоящее время я проверяю, будет ли он работать над моим приложением.
Идея состоит в том, чтобы сделать сбор мусора, вызвав System.gc (), который, как известно, увеличивает свободную память. Вы можете продолжать проверять это после выполнения кода gobbling памяти.
//Mimimum acceptable free memory you think your app needs
long minRunningMemory = (1024*1024);
Runtime runtime = Runtime.getRuntime();
if(runtime.freeMemory()<minRunningMemory)
System.gc();
Вы можете использовать NumPy's advanced indexing
-
A[np.arange(A.shape[0])[:,None],B]
Можно также использовать linear indexing
-
m,n = A.shape
out = np.take(A,B + n*np.arange(m)[:,None])
Прогон прогона -
In [40]: A
Out[40]:
array([[2, 4, 5, 3],
[1, 6, 8, 9],
[8, 7, 0, 2]])
In [41]: B
Out[41]:
array([[0, 0, 1, 2],
[0, 3, 2, 1],
[3, 2, 1, 0]])
In [42]: A[np.arange(A.shape[0])[:,None],B]
Out[42]:
array([[2, 2, 4, 5],
[1, 9, 8, 6],
[2, 0, 7, 8]])
In [43]: m,n = A.shape
In [44]: np.take(A,B + n*np.arange(m)[:,None])
Out[44]:
array([[2, 2, 4, 5],
[1, 9, 8, 6],
[2, 0, 7, 8]])
Ниже приведено решение с использованием цикла for
:
outlist = []
for i in range(len(B)):
lst = []
for j in range(len(B[i])):
lst.append(A[i][B[i][j]])
outlist.append(lst)
outarray = np.asarray(outlist)
print(outarray)
Выше также может быть написано в форме более сжатого списка:
outlist = [ [A[i][B[i][j]] for j in range(len(B[i]))]
for i in range(len(B)) ]
outarray = np.asarray(outlist)
print(outarray)
Выход:
[[2 2 4 5]
[1 9 8 6]
[2 0 7 8]]
B
. Предоставленная ссылка должна содержать все необходимые сведения. – Divakar 31 October 2017 в 22:41