如何在 Numpy 中迭代一维数组并构建二维数组



如果我有一个 1D numpy.ndarray b和一个想要矢量化的 Python function f,使用 numpy.vectorize 函数非常简单:

c = numpy.vectorize(f)(a) .

但是,如果f返回 1D numpy.ndarray而不是标量,如何构建 2D numpy.ndarray?(也就是说,我希望从f返回的每个 1D numpy.ndarray都成为新 2D numpy.ndarray中的一行。

例:

def f(x):
    return x * x
a = numpy.array([1,2,3])
c = numpy.vectorize(f)(a)
def f_1d(x):
    return numpy.array([x, x])
a = numpy.ndarray([1,2,3])
d = ???(f_1d)(a)

在上面的例子中,c将变为array([1, 4, 9]) 。如果d应该成为array([[1, 1], [2, 2], [3, 3]])???应该用什么替换?

可以这样做:

def f_1d(x):
    return (x,x)
d = numpy.column_stack(numpy.vectorize(f_1d)(a))

将输出:

array([[1, 1],
       [2, 2],
       [3, 3]])

我想你正在寻找重塑和重复

def f(x):
    return x * x
a = numpy.array([1,2,3])
b= numpy.vectorize(f)(a)
c = numpy.repeat(b.reshape( (-1,1) ),2, axis=1)
print c

输出:

[[1 1]
 [4 4]
 [9 9]]

您也可以直接设置 array.shape 元组。值得知道的是,如果您需要编写纯python,则可以使用map完成与vectorize相同的任务。 b= numpy.vectorize(f)(a)会变得b=map(f,a)

使用这种方法,根本不需要f_1d,因为它似乎所做的只是重复的信息,最好通过 numpy.repeat .

此外,此版本速度更快,但这仅在处理大型数组时才重要。

相关内容

  • 没有找到相关文章

最新更新