python - 如何制作一个接受 numpy 数组、可迭代对象或标量的 numpy 函数?

标签 python arrays numpy

假设我有这个:

def incrementElements(x):
   return x+1

但我想修改它,以便它可以采用 numpy 数组、可迭代对象或标量,并将参数提升为 numpy 数组并将每个元素加 1。

我该怎么做?我想我可以测试参数类,但这似乎是个坏主意。如果我这样做:

def incrementElements(x):
   return numpy.array(x)+1

它适用于数组或可迭代对象,但不适用于标量。这里的问题是标量 x 的 numpy.array(x) 产生一些奇怪的对象,它包含在 numpy 数组中,但不是“真正的”数组;如果我向它添加一个标量,结果将降级为一个标量。

最佳答案

你可以试试

def incrementElements(x):
    x = np.asarray(x)
    return x+1

np.asarray(x) 等同于 np.array(x, copy=False),这意味着标量或可迭代对象将被转换为ndarray,但是如果x已经是一个ndarray,它的数据将不会被复制。

如果你传递一个标量并想要一个 ndarray 作为输出(不是标量),你可以使用:

def incrementElements(x):
    x = np.array(x, copy=False, ndmin=1)
    return x

ndmin=1 参数将强制数组至少有一个维度。至少对 2 个维度使用 ndmin=2,依此类推。您还可以使用其等效的 np.atleast_1d(或 np.atleast_2d 用于 2D 版本...)

关于python - 如何制作一个接受 numpy 数组、可迭代对象或标量的 numpy 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12653120/

相关文章:

python - 如何使用 numpy 数组中的索引进行计算

python - 使用 Numba 加速 Python 代码时引发 TypeError

python - 使用 json 中的嵌套数据创建表并将其附加到 databricks

Javascript:将字符串转换为对象数组?

java - 你如何声明一个未知大小的字符串数组?

java - 如何删除重复项?

python - 获取数组某部分的平均值

python - 为什么 np.linspace(1,5,5, dtype = int, endpoint=False) 会导致包含 1 两次的数组?

python - Groupby和转置 Pandas , python

python - celery 预定列表返回无