我想对一个函数进行向量化,该函数将2个对象作为参数,这样它需要2个ndarray(长度为m和n)并返回一个形状矩阵(m×n)。 有点像张量产品。
我尝试使用numpy.vectorize但没有取得多大成功:
vFunc = np.vectorize(myFunc)
arg1 = np.asmatrix(a)
arg2 = np.transpose(np.asmatrix(b))
test = vFunc(arg1,arg2)
以上不起作用,所以现在我必须迭代其中一个数组,这是一个丑陋的解决方案。我该如何解决这个问题?
vFunc = np.vectorize(myFunc)
arg1 = np.asmatrix(a)
arg2 = np.transpose(np.asmatrix(b))
for i in range(arg1.size): cMat[i,] = vFunc(arg1[i],arg2)
答案 0 :(得分:1)
这是基本vectorize
设置:
In [420]: def myfunc(x,y):
...: return 10*x + y
...:
In [421]: f = np.vectorize(myfunc)
In [422]: f(np.arange(4), np.arange(3)[:,None])
Out[422]:
array([[ 0, 10, 20, 30],
[ 1, 11, 21, 31],
[ 2, 12, 22, 32]])
你的情况有何不同?不要只说'它不起作用'!
使用此特定功能,我甚至不需要vectorize
:
In [423]: myfunc(np.arange(4), np.arange(3)[:,None])
Out[423]:
array([[ 0, 10, 20, 30],
[ 1, 11, 21, 31],
[ 2, 12, 22, 32]])
myfunc
中的操作已在broadcasting
myfunc(np.asmatrix(np.arange(4)), np.asmatrix(np.arange(3)).T)
也有效,但不需要转换为矩阵,通常不鼓励。