【问题标题】:Apply method to every object of an array [duplicate]将方法应用于数组的每个对象[重复]
【发布时间】:2021-08-27 15:20:14
【问题描述】:

我有一个np.array 对象,我想对这个数组中的每个对象应用相同的方法。例如:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2,)

现在我想要每个轴对象中的网格线。我知道我可以通过使用 for 循环遍历 ax 数组来做到这一点。

for i in ax:
    i.grid()

有没有更优雅的方法?喜欢np.somefunction(array, method)

【问题讨论】:

  • 这在这种特殊情况下很有帮助,但在一般情况下,如果你有一个对象数组,你就不能这样做。但是感谢您的帮助
  • 我想这真的取决于你正在处理的对象类型。
  • 对象 dtype 数组更像是对象列表,而不是数字数组。所以迭代或列表理解通常同样好。有一个np.frompyfunc 函数可以使这样的调用“更漂亮”,但对速度的影响不大。

标签: python numpy


【解决方案1】:

如果您使用 matplotlib,plt.setp 通常是同时在多个轴上设置属性的选项。不幸的是,设置网格是 setp 无法做到的一件事(例如,matplotlib: why does setting grid with pyplot.setp() causes error?)。相反,您可以修改mpl.rcParams。您可以使用mpl.rc_context 临时为您的身材执行此操作:

from matplotlib import pyplot as plt, rc_context

with rc_context(rc={"axes.grid": True}:
    fig, ax = plt.subplots(2, 2)
fig, ax = plt.subplots(2, 2)

上下文管理器中的图形如下所示:

另一个,像这样:

如果您正在寻找一种将函数应用于数组的通用方法,那么实际上没有:Most efficient way to map function over numpy array

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2021-09-14
    • 2012-12-14
    • 2021-12-26
    • 2022-06-12
    • 2019-09-14
    相关资源
    最近更新 更多