Итерация по numpy ndindex: процесс убит - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу перебрать многомерный массив, используя следующую функцию, а затем перебрать список ограничений

def H(x, y, low, upp): #x and y are multidim. arrays
a = np.ones(x.shape)
for index in np.ndindex(x.shape):
    if x[index] >= low and x[index] < upp:
        a[index] = y[index]
    else:
        a[index] = 0
return a

l_outputs = []
for i in range(list_of_limits.shape[0]):
    if list_of_limits[i] != 360:
        ans = H(x_array, y_array, list_of_limits[i], list_of_limits[i+1])
    l_outputs.append(ans)

Функция и код работают отлично, когда я пытаюсь использовать небольшие массивы (например, [4, 5, 3]) в качестве входных данных, но как только я пытаюсь использовать большие массивы (например, [124, 10, 241, 320]), он запускается в течение длительного времени, после чего я получаю сообщение «Killed», весь процесс уничтожается и никаких выходных данных.

Кстати, мой компьютер - высокопроизводительный.Так что проблема с моим кодом (цикл или функция), то есть ли лучший способ сделать это и сохранить время выполнения или как я запускаю свой скрипт?

Пример:

a = np.array([220,230, 240, 250, 260 ,270 ,280, 290, 300, 310, 320, 330,340, 350, 360, 370, 380, 390,400 ,410 ,420 ,430, 240, 250, 260 ,270 ,310, 320, 330, 410 ,420 ,430, 240, 230, 240, 250, 260 ,270, 420 ,430, 240, 360, 370, 380, 270, 420 ,430, 240, 360, 260,270 ,310, 320, 330,380, 270, 230, 240, 250, 420])       

a = a.reshape(4, 5, 3)

b = np.arange(60).reshape(4, 5, 3

ans = H(a, b, 260, 280)

print(ans)

[[[ 0.  0.  0.]
  [ 0.  4.  5.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [ 0.  0.  0.]
  [24. 25.  0.]
  [ 0.  0.  0.]]

 [[ 0.  0.  0.]
  [ 0.  0.  0.]
  [36. 37.  0.]
  [ 0.  0.  0.]
  [ 0.  0. 44.]]

 [[ 0.  0.  0.]
  [ 0. 49. 50.]
  [ 0.  0.  0.]
  [ 0. 55.  0.]
  [ 0.  0.  0.]]]
...