【问题标题】:Using python array's column as boolean to change another column's values使用 python 数组的列作为布尔值来更改另一列的值
【发布时间】:2016-05-15 18:12:24
【问题描述】:

我对 python 非常陌生,所以这可能就是为什么我无法在此站点中正确搜索我的问题的答案,以防有人已经知道它。

我正在读取几个包含六列的数据文件:XYZ 坐标和球体周围的 3 向量分量。我正在使用 X 和 Z 坐标来查找我的向量的角度位置,并将角度结果用作我的数组的新列,作为第四列。所以,我有一个 7 列数组。

使用 np.arctan 计算角度,根据 XZ 坐标所在的象限,它们得到 (-) 或 (+) 符号。

现在,我想让球体上半部分(Z 正)周围的所有角度都为正,并且范围从 0º 到 180º。另一方面,我希望下半部分的角度为负,从 0º 到 -180º。

更改符号和应用 0º-180º 范围的操作很容易实现。但是,我想使用数组的第三列(Z 坐标)作为布尔值来决定如何更改角度(数组的第四列)。我已经阅读了很多关于切片数组或根据应用于相同列/行的任意布尔条件修改列/行的信息。

我试图避免组合 for 循环和 if 语句,并学习如何使用 python 的强大功能:)

提前致谢!

【问题讨论】:

  • 您应该使用np.arctan2(a, b) 代替np.arctan(a/b)。我认为这可能会解决您的整个问题
  • 如果您可以提供示例数据以及您可能期望的输出结果,这可能会有所帮助。如果你有一些代码,那就更好了!
  • 谢谢 Eric,已经解决了!我想我需要更仔细地重新阅读有关 arctan2 的内容。
  • 韦恩,我认为没有必要发布我的大量数据。对此深表歉意,下次我的问题会更加彻底。

标签: python arrays numpy boolean


【解决方案1】:

np.where(cond, if_true, if_false) 解决了你认为你有的问题

fixed_angle = np.where(z > 0, angle, -angle)

实际遇到的问题是你没有使用atan2,或者用numpy拼写,np.arctan2

【讨论】:

  • 感谢 Eric 的详细解答!
  • 再次感谢!我刚刚发现它还将我的角度范围转换为所需的角度范围。我在哪里可以给你的评论加星???
猜你喜欢
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2021-09-01
  • 2021-01-24
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
相关资源
最近更新 更多