【问题标题】:If condition cannot evaluate multiple "True"s - Python如果条件不能评估多个“真” - Python
【发布时间】:2018-01-27 19:34:44
【问题描述】:

我有一个名为 BNodeVal 的 3D numpy 数组。目前它的大小是(1,1,16),但它可以比这更大。我正在尝试使用此 3D 数组和 3 个坐标 coord_x , coord_y, coord_z 评估 if 条件。

BNodeVal = [[[ 0. 1. 15. 0. 0. 13.4 1.77 15.9 1.77 37.391 1.03 40.931 39.161 0.5402 0. 0. ]]]

下面是不能正常工作的那部分代码:

for j in range(int(np.amax(BNodeval[i, :, 1]))):
    print("x = ", coord_x, "\ny =", coord_y, "\nz =", coord_z)
    print("3 = ", BNodeval[i][j][2], "\n4 =", BNodeval[i][j][3], "\n5 =", BNodeval[i][j][4])
    print(np.isclose(coord_x, BNodeval[i][j][2]))
    print(np.isclose(coord_y, BNodeval[i][j][3]))
    print(np.isclose(coord_z, BNodeval[i][j][4]))

    if np.isclose(coord_x, BNodeval[i][j][2]) and \
       np.isclose(coord_y, BNodeval[i][j][3]) and \
       np.isclose(coord_x, BNodeval[i][j][4]) :  # 1 - 1
        print("# 1 - 1")
    else:
        print('# 1 - 2")

这是它正在打印的内容:

x =  15.0 
y = 0.0 
z = 0.0
3 =  15.0 
4 = 0.0 
5 = 0.0
True
True
True
# 1 - 2

但是,如果我只使用np.isclose 术语之一,它就可以正常工作并打印# 1 - 2。任何建议表示赞赏。

【问题讨论】:

  • 但是您在实际的if 语句之前重置 BNodeval。
  • 谢谢,但那是BNodevalue 不是BNodeval
  • 在我看来,这不是命名变量的最佳方式。你是在要求这样的混乱。
  • 感谢您的建议,我现在正在编辑变量

标签: python numpy


【解决方案1】:

最后一个测试是错误的。您正在打印:

print(np.isclose(coord_z, BNodeval[i][j][4]))

但是测试:

np.isclose(coord_x, BNodeval[i][j][4])
                 ^ should be z

【讨论】:

  • 谢谢,我不知道我是怎么想念这个的。
猜你喜欢
  • 2017-12-18
  • 2018-02-24
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2023-01-11
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多