繁体   English   中英

如何在Numpy中迭代1D数组并构建2D数组?

[英]How can I iterate over an 1D array and build a 2D array in 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来完成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM