【问题标题】:Creating a list of Indices having '1' and '-1' elements from a 2D numpy array从 2D numpy 数组创建具有“1”和“-1”元素的索引列表
【发布时间】:2018-07-01 18:17:03
【问题描述】:

我创建了一个 2D 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 b(1)

NameError: name 'b' is not defined

【问题讨论】:

  • 确实,您从未定义过b
  • 对不起,我忘记添加了

标签: python arrays numpy


【解决方案1】:

这不是你定义函数的方式:

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 只是两个数字,因此它们是等价的,但迟早[...][...] 索引风格会咬你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2015-05-25
    • 2017-08-04
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多