Numpy将标量转换为数组

2024-05-06 07:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用x数组计算任意表达式,例如3*x**2+4。这通常会产生一个x形状的数组。但是,如果表达式只是一个常量,则返回标量。在不明确检查形状的情况下,确保它具有x形状的最佳方法是什么?乘以numpy.one(x.shape)是可行的,但我认为这需要不必要的计算。

编辑: 为了清楚起见,我不仅仅希望它是一个1号数组,我希望它的形状和大小与X相同。 我正在使用NumExpr计算字符串,它可以包含x的任意函数:

x = numpy.linspace(min, max, num)
y = numexpr.evaluate(expr, {'x': x}, {})

我想得到一个y值数组,可以通过matplotlib对x进行绘制。目前我正在做这件事,效果很好:

y = numpy.ones(x.size) * y

但我担心这会浪费大尺寸的衣服。有更好的办法吗?


Tags: 方法函数字符串numpy编辑表达式情况数组
3条回答

您可以使用整形:np.reshape(x, (1,1))

下面是演示:

>>> x = 4
>>> a = np.reshape(x, (1,1))
>>> a[0]
array([4])
>>> a[0][0]

当我不确定x是标量、列表/元组还是数组时,我一直在使用:

x = np.asarray(x).reshape(1, -1)[0,:]

或者,通过(ab)使用广播规则,您可以同样地编写:

x = np.asarray(x) * np.ones(1)

也许一个稍微简化一点的语法是使用数组构造函数上的额外参数:

x = np.array(x, ndmin=1, copy=False)

这将确保数组至少有一个维度。

但这是一件看起来有点笨拙的事情

atleast_1d

Convert inputs to arrays with at least one dimension.

>>> import numpy as np
>>> x = 42  # x is a scalar
>>> np.atleast_1d(x)
array([42])

>>> x_is_array = np.array(42)  # A zero dim array
>>> np.atleast_1d(x_is_array)
array([42])

>>> x_is_another_array = np.array([42])  # A 1d array
>>> np.atleast_1d(x_is_another_array)
array([42])

>>> np.atleast_1d(np.ones((3, 3)))  # Any other numpy array
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

相关问题 更多 >