В дополнение к этому efficient algorithm for list edits Я ищу более эффективный алгоритм для другого «вычисления цикла». На этот раз у меня есть матрица типа:Эффективный алгоритм вычисления матрицы
grid_z1 = [[1,2,3],
[4,5,6],
[7,8,9]]
и пользователь может ввести несколько параметров: Цель состоит в том, чтобы изменить значение внутри матрицы в параметре-значение, которое является следующим самым высоким (и если матричным значение больше, чем max (параметр), чем изменение его на nan), например, когда пользователь вводил «4» и «7», тогда значение матрицы «5» должно изменяться на «7» (= следующая самая высокая из введенные значения). пример:
h = [2, 7, 4] # user entered this three values
grid_z1 = [[2, 2, 4],
[4, 7, 7],
[7, nan, nan]] # this should be my output
В дополнение я хочу, чтобы подсчитать количество значений, которые изменились в заданных значений. в моем примере это должно быть [2,2,3] -> 2x2, 2x4, 3x7
h.sort()
h.reverse()
count = [0]*len(h)
for i in range(len(grid_z1)):
for j in range(len(grid_z1[0])):
if grid_z1[i][j] > max(h):
grid_z1[i][j] = float('NaN')
else:
for k in range(len(h)-1):
if grid_z1[i][j] <= h[k] and grid_z1[i][j] > h[k+1]:
grid_z1[i][j] = h[k]
count[k] += 1
if grid_z1[i][j] <= min(h):
grid_z1[i][j] = min(h)
count[-1] += 1
print grid_z1
print count
Но опять-таки это очень медленно. К сожалению, я не понимаю метод zip, чтобы использовать его для этого более сложного алгоритма.
вы должны смотреть на [NumPy] (http://www.numpy.org/) –