我正在尝试将numpy数组的每个元素转换为数组本身(例如,将灰度图像解释为彩色图像).换一种说法:
>>> my_ar = numpy.array((0,5,10)) [0, 5, 10] >>> transformed = my_fun(my_ar) # In reality, my_fun() would do something more useful array([ [ 0, 0, 0], [ 5, 10, 15], [10, 20, 30]]) >>> transformed.shape (3, 3)
我试过了:
def my_fun_e(val): return numpy.array((val, val*2, val*3)) my_fun = numpy.frompyfunc(my_fun_e, 1, 3)
但得到:
my_fun(my_ar) (array([[0 0 0], [ 5 10 15], [10 20 30]], dtype=object), array([None, None, None], dtype=object), array([None, None, None], dtype=object))
我试过了:
my_fun = numpy.frompyfunc(my_fun_e, 1, 1)
但得到:
>>> my_fun(my_ar) array([[0 0 0], [ 5 10 15], [10 20 30]], dtype=object)
这很接近,但不是很正确 - 我得到一个对象数组,而不是一个整数数组.
更新3!好.我已经意识到我的例子事先太简单了 - 我不只是想在第三维复制我的数据,我想同时转换它.也许这更清楚了?
numpy.dstack能做你想做的吗?前两个索引与原始数组相同,新的第三个索引是"深度".
>>> import numpy as N >>> a = N.array([[1,2,3],[4,5,6],[7,8,9]]) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b = N.dstack((a,a,a)) >>> b array([[[1, 1, 1], [2, 2, 2], [3, 3, 3]], [[4, 4, 4], [5, 5, 5], [6, 6, 6]], [[7, 7, 7], [8, 8, 8], [9, 9, 9]]]) >>> b[1,1] array([5, 5, 5])