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

时间:2012-11-18 05:26:48

标签: python numpy 2d loops multidimensional-array

如果我有1D numpy.ndarray b和Python function f我想要进行矢量化,那么使用numpy.vectorize函数非常容易:

c = numpy.vectorize(f)(a)

但如果f返回1D numpy.ndarray而不是标量,我该如何构建2D numpy.ndarray呢? (也就是说,我希望从numpy.ndarray返回的每个1D f成为新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]])替换什么?

2 个答案:

答案 0 :(得分:1)

可以这样做:

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

将输出:

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

答案 1 :(得分:0)

我认为您正在寻找reshaperepeat

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元组。 可能值得知道,您可以使用vectorize完成相同的工作,{strong>如果您需要编写纯python。 map将成为b= numpy.vectorize(f)(a)

使用这种方法,根本不需要使用b=map(f,a),因为它似乎只是重复信息,f_1d最好这样做。

此外,这个版本的速度要快一些,但这只是在处理大型数组时才有意义。