Ven*_*tta 1 python numpy vectorization
[编辑:我刷这个例子,所以我没有很好地清理我的代码.我的问题更多,如何将子数组传递给numpy.vectorize-d函数,而不是特别关于这个例子.
我无法弄清楚如何使用numpy.vectorize或numpy.frompyfunc来向量化以数组作为参数的命令.
让我们想想这个简单的例子(我理解这是一个非常基本的例子,我根本不需要使用numpy.vectorize.我只是想要一个例子):
aa = [[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]]
bb = [[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]]
Run Code Online (Sandbox Code Playgroud)
我想要一个函数,它将aa和bb的每个子数组的第二个元素相加.在这个例子中,我想返回一个[202 203 206 210]的数组
但像这样的代码不起作用:
def vec2(bsub, asub):
return bsub[1] + asub[1]
func2 = np.vectorize(vec2)
func2( bb, aa )
Run Code Online (Sandbox Code Playgroud)
与numpy.frompyfunc类似的事情没有运气.
我的问题是,如何将一个子数组列表转换为numpy.vectorize-d函数,并让每个子数组成为函数的参数?
你的一个问题是aa和bb是列表,而不是numpy.array().你应该这样做:
aa = np.array([[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]])
bb = np.array([[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]])
Run Code Online (Sandbox Code Playgroud)
我注意到的第二件事是,要获得每个子阵列的第二个元素,你需要aa[:,1],而不是aa[2].
第三,你的vec2功能应该return是,而不仅仅是print.
最后一个问题是你的vec2函数应该对整数而不是数组进行操作,你应该将切片传递给函数,而不是整个数组.修正后的版本(返回预期的输出)是:
import numpy as np
aa = np.array([[1,2,3,4], [2,3,4,5], [5,6,7,8], [9,10,11,12]])
bb = np.array([[100,200,300,400], [100,200,300,400], [100,200,300,400], [100,200,300,400]])
def vec2(a, b):
return a + b
func2 = np.vectorize(vec2)
print func2(bb[:,1], aa[:,1])
Run Code Online (Sandbox Code Playgroud)
注意OP的帖子上的编辑使这个答案看起来有点奇怪.
| 归档时间: |
|
| 查看次数: |
6007 次 |
| 最近记录: |