【问题标题】:Error in applying different if statements to each element of a numpy array将不同的 if 语句应用于 numpy 数组的每个元素时出错
【发布时间】:2021-05-02 04:20:26
【问题描述】:

早上好,我有一个简单的问题,关于对 numpy 数组的每个元素应用不同的 if 语句。 我编写了一个函数,它将一个由 12 个元素组成的 numpy 数组作为输入,检查元素是 0 还是 1,如果是 1,则作用于另一个数组。函数如下:

def symmetry_test(determinant):
    print(determinant)
    ag=np.array([1,1,1,1])
    bg=np.array([1,-1,-1,1])
    au=np.array([1,1,-1,-1])
    bu=np.array([1,-1,1,-1])
    representations=np.zeros((4,12))
    print(determinant[0])
    if int(determinant[0])==1:
       representations[:,0]=au
   
    print(determinant[1])
    if int(determinant[1])==1:
       representations[:,1]=au
   
    print(determinant[2])
    if determinant[2]==1:
       representations[:,2]=ag

    print(determinant[3])
    if determinant[3]==1:
       representations[:,3]=ag
  
    if determinant[4]==1:
       representations[:,4]=bg

    if determinant[5]==1:
       representations[:,5]=bg
 
    if determinant[6]==1:
       representations[:,6]=ag
   
    if determinant[7]==1:
       representations[:,7]=ag
 
    if determinant[8]==1:
       representations[:,1]=bu

    if determinant[9]==1:
       representations[:,9]=bu
 
    if determinant[10]==1:
       representations[:,10]=au
  
    if determinant[11]==1:
       representations[:,11]=au

    idx = np.argwhere(np.all(representations[..., :] == 0, axis=0))
    representations = np.delete(representations, idx, axis=1)
    return representations

该函数将determinant作为输入,这是一个numpy数组,生成一个名为representations的数组并填充它。我将print(determinant[0])int(determinant[0]) 放入定义中以检查函数是否正确读取数组。 问题如下:如果我将一个定义为test=np.array([1,1,1,1,1,1,0,0,0,0,0,0]) 的数组作为输入,则该函数可以正常工作并返回和数组一样

 1  1  1  1  1  1
 1  1  1  1 -1 -1
-1 -1  1  1  1  1
-1 -1  1  1 -1 -1

这正是我想要的。 现在,如果我将数组test=np.array([1,1,1,1,0,0,0,0,1,1,0,0]) 提供给函数并将其用作a=symmetry_test(test),则输出为

 1  1  1  1  1
 1 -1  1  1 -1
-1  1  1  1  1
-1 -1  1  1 -1

(是的,它只有 5 列) 而不是

 1  1  1  1  1  1
 1  1  1  1 -1 -1
-1 -1  1  1 -1 -1
-1 -1  1  1  1  1

老实说,我不知道它不起作用的原因,最让我困惑的是,对于一个阵列它可以工作,而对于另一个阵列它完全失败了。 我试图取消 else 条件

else:
    representations[:,0]=np.zeros(4)

在每个 if 语句之后没有成功;我还尝试将 determinant=np.asarray(determinant) 放在函数的开头,但在这种情况下,它也没有解决问题。 任何建议将不胜感激。 提前致谢,很抱歉这个简单的问题。

【问题讨论】:

    标签: python arrays function numpy if-statement


    【解决方案1】:

    这是您代码中的错误。

    if determinant[8] == 1:
        representations[:, 1] = bu
    

    应该是

    if determinant[8] == 1:
        representations[:, 8] = bu
    

    如果您想要更简洁的方式来实现该功能,请考虑以下 -

    def symmetry_test(determinant):
        
        ag = np.array([1, 1, 1, 1])
        bg = np.array([1, -1, -1, 1])
        au = np.array([1, 1, -1, -1])
        bu = np.array([1, -1, 1, -1])
    
        representations = np.array([au, au, ag, ag, bg, bg, ag, ag, bu, bu, au, au])
    
        determinant = np.array(determinant, dtype=np.bool)
    
        return representations[determinant]
    

    【讨论】:

    • 哇,谢谢!我检查了几次代码,我不知道我是怎么错过的,但重要的是现在它可以工作了,再次感谢。
    • @capitn96 - 顺便说一句,如果有条件,你并不真的需要这样做,我已经添加了一种简洁的方法。另外,如果这解决了您的问题,请将答案标记为正确并考虑关闭问题。
    猜你喜欢
    • 2020-02-28
    • 2013-12-11
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多