【发布时间】: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