python - 如何在 numpy 数组中同时允许 float 和数组

标签 python arrays numpy

使用 numpy 和 matplotlib,函数允许数字(float 或 int)或 numpy 数组作为参数似乎很常见,如下所示:

import numpy as np

print np.sin(0)
# 0

x = np.arange(0,4,0.1)
y = np.sin(x)

在这个例子中,我用一个整数参数调用 np.sin 一次,然后用一个 numpy 数组 x 调用一次。我现在想写一个允许类似处理的函数,但我不知道怎么做。例如:

def fun(foo, n):
    a = np.zeros(n)
    for i in range(n):
        a[i] = foo
    return a

将允许我像 fun(1, 5) 那样调用 fun,但不能像 fun(x, 5) 那样调用。当然,我的实际计算要复杂得多。

如何初始化 a 以便我可以将简单数字或整个数字数组作为元素?

非常感谢您的帮助!

最佳答案

内置 numpy 函数通常以

开头
 def foo(a, ...):
     a = np.asarray(a)
     ...

也就是说,它们将输入参数转换为数组(如果它已经是数组,则不复制)。这允许他们使用标量和列表。

一旦参数是一个数组,它就有一个形状并且可以针对其他参数进行广播。

在您的示例中,不清楚当 foo 是数组时应该发生什么

def fun(foo, n):
    a = np.zeros(n)
    for i in range(n):
        a[i] = foo
    return a

a 被初始化为 dtype float 数组。这意味着 a[i]=foo 仅在 foo 是单个元素编号(标量,可能是单个元素数组)时才有效。如果 foo 是一个具有多个值的数组,您可能会收到有关尝试使用序列设置元素的错误。

a[i]a[i,...] 的缩写。那就是它在第一维上建立索引。因此,如果 a 的初始值正确,它可以接受数组作为输入(遵守广播规则)。

如果 a 初始化为 np.zeros(n, dtype=object),则 a[i]=foo 将与任何东西,因为它 a 只包含指向 Python 对象的指针。

np.frompyfunc 是一种从函数生成数组的方法。但是它返回一个 dtype=object 的数组。 np.vectorize 使用它,但可以让您更好地控制输出类型。但两者都适用于标量。数组(如果作为参数给出)将逐个元素传递给函数。

关于python - 如何在 numpy 数组中同时允许 float 和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794241/

相关文章:

python - Matplotlib:带有 slider 小部件的等高线图

c - 在 C 中重新排列交替正负的数组

javascript - 记住 jQuery 中的最后 n 项

c - 使用字符指针复制字符串

arrays - 使用 np.savetxt 保存包含字符串和 float 的结构化 numpy 数组

Python C 扩展——维护状态

python - 在 Python 中动态创建类时 exec 与 type

python - 使用参数启动 pytest fixture

python - 在 NumPy 数组中沿轴获取 N 个最大值和索引

python - 为什么 scipy.optimize.curve_fit 不能使用 numpy.sinc 函数拟合我的数据?