Создание списка индексов с элементами «1» и «-1» из двумерного массива - PullRequest
0 голосов
/ 01 июля 2018

Я создал двумерный массив NumPy и ввел '1' и '-1' в случайных местах на протяжении итераций. Теперь я хочу список индексов, имеющих те и минус. Вот мой код:

import math
import numpy as np
import itertools

def function(
        250,
        10,
        50):


    crystal = np.zeros((250,250))

    defect_concentration = np.zeros(50)
    for k in range(50):


        i= np.random.randint(0,250-1,size =2)
        while crystal[i[0]][i[1]] != 0:
            i = np.random.randint(0,250-1,size =2)
        crystal[i[0]][i[1]] = -1
        j = np.random.randint(0,250-1,size =2)
        while crystal[j[0]][j[1]] !=0:
            j = np.random.randint(0,250-1,size =2)
        crystal[j[0]][j[1]] = 1 

        b = []
        c = []
        dist = math.sqrt(((i[0]-j[0])**2)+((i[1]-j[1])**2))

        if dist <= 10:
            crystal[i[0]][i[1]] = 0
            crystal[j[0]][j[1]] = 0

        else:    

            for x in range(len(crystal)):
                for y in range(len(crystal)):

                    if crystal[x][y] < 0:
                        b.append((x,y))
                     elif crystal[x][y] != 0:
                        c.append((x,y))

но я не получаю ожидаемый результат.

B (1)

----------------------------------------------- ---------------------------- NameError Traceback (последний вызов последний) в () ----> 1 б (1)

NameError: имя 'b' не определено

1 Ответ

0 голосов
/ 02 июля 2018

Это не то, как вы определяете функцию:

def function(
        250,
        10,
        50):

Вы можете очистить индексирование crystal:

In [512]: crystal[i[0]][i[1]]=10
In [513]: crystal[i[0]][i[1]]
Out[513]: 10.0

Больше идиоматических numpy:

In [514]: crystal[i[0], i[1]]
Out[514]: 10.0

или даже

In [515]: crystal[tuple(i)]
Out[515]: 10.0

Поскольку i - это только 2 числа, это эквивалентно, но рано или поздно стиль индексации [...][...] укусит вас.

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