Как создать 2d массив NumPy с помощью цикла for [Python] - PullRequest
0 голосов
/ 17 мая 2018

Получить проблему Существует двойной цикл, во вторичном цикле мы получаем массив из 10 элементов. Затем, после каждого цикла (первого), вам нужно добавить эти элементы в массив. На выходе вам нужно получить массив вида:

result_array = [[inter2d_resultFIRST],[inter2d_resultSECOND],[inter2d_resultTHIRD]]

КОД:

points = np.array([[-100, 0], [100, 0], [100, 300],[-100,300]])
density = 1000 
result_array = np.array([])
visual_x = np.array([])

for h in range(3):
    points = np.array([[-100, 0], [100, 0], [100, 300],[-100,300]])
    inter_result = np.array([])
    inter2d_result = np.array([])
    poly = [mesher.Polygon(points,{'density': density})]
    xp = np.arange(-10000, 10000, 10.0)
    zp = np.zeros_like(xp)
    for i in range(10):
        poly = [mesher.Polygon(points,{'density': density})]
        xp = np.arange(-10000, 10000, 10.0)
        zp = np.zeros_like(xp)
        gz = talwani.gz(xp, zp, poly)
        inter_result = np.append(inter_result, np.nanmax(gz))
        visual_x = np.append(visual_x, points[1][0]*2)
        points[0][0] = points[0][0] - 10
        points[1][0] = points[1][0] + 10
        points[2][0] = points[2][0] + 10
        points[3][0] = points[3][0] - 10
    inter2d_result = np.append(inter2d_result,inter_result)
    result_array = np.append(result_array[h], inter2d_result)

Получите ошибку:

IndexError                                Traceback (most recent call last)
<ipython-input-87-c3ef6fe1381b> in <module>()
     40 
     41     inter2d_result = np.append(inter2d_result,inter_result)
---> 42     result_array = np.append(result_array[h], inter2d_result)
     43 
     44 

IndexError: index 0 is out of bounds for axis 0 with size 0

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Сначала давайте сосредоточимся на операции добавления,

import numpy as np
a = np.array( [1,2,3] )
b = np.array( [4,5,6] )

np.append( a, b )

создает массив

([1, 2, 3, 4, 5, 6])

Чтовам может понадобиться

np.append( [a], [b], 0 )

, который производит массив

([[1, 2, 3], [4, 5, 6]])

Обратите внимание, что здесь0 появляется в третьем параметре, чтобы указать ось для операции добавления.

Относительно ошибки индекс h указывает numpy добавить к элементу 'h'.Это, вероятно, не то, что вы хотели.Кроме того, индекс неверен, поскольку «h» всегда на единицу больше, чем количество элементов в массиве в точке, где происходит вызов.

0 голосов
/ 17 мая 2018

Я думаю, вы пытаетесь добавить значение в result_array.Вы должны попробовать без (h), потому что это будет пытаться проиндексировать значение, уже существующее в result_array по индексу h.Но так как массив пуст для запуска, поэтому нет 0-го значения и h = 0 для первой итерации, поэтому вы получаете ошибку.

Возможно, попробуйте np.append(result_array, inter2d_result)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...