【问题标题】:iterate over two numpy arrays return 1d array遍历两个 numpy 数组返回一维数组
【发布时间】:2018-04-22 18:29:56
【问题描述】:

我经常有一个函数返回单个值,例如最大值或整数。然后我想迭代另一个参数。这是一个使用抛物线的简单示例。我不认为它的广播,因为我只想要一维数组。在这种情况下,它的最大值。一个真实的例子是太阳能电池的最大功率点作为光强度的函数,但原理与这个例子相同。

import numpy as np
x = np.linspace(-1,1) # sometimes this is read from file
parameters = np.array([1,12,3,5,6]) 
maximums = np.zeros_like(parameters)

for idx, parameter in enumerate(parameters):
    y = -x**2 + parameter
    maximums[idx] = np.max(y) # after I have the maximum I don't need the rest of the data.

print(maximums)

在 Python/Numpy 中执行此操作的最佳方法是什么?我知道一种简化是使函数成为 def 然后使用 np.vectorize 但我的理解是它不会使代码更快。

【问题讨论】:

标签: python python-3.x loops numpy


【解决方案1】:

将其中一个数组扩展为 2D,然后让 broadcasting 以矢量化方式进行这些外部添加 -

maximums = (-x**2 + parameters[:,None]).max(1).astype(parameters.dtype)

或者,显式使用外部添加方法 -

np.add.outer(parameters, -x**2).max(1).astype(parameters.dtype)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多