我有numpy.array
s 其中列包含不同的数据类型,并且列也应该具有应用于它们的不同功能。我也有数组中的函数。
比方说:
a = array([[ 1, 2.0, "three"],
[ 4, 5.0, "six" ]], dtype=object)
functions_arr = array([act_on_int, act_on_float, act_on_str])
我当然可以通过划分事物来想办法做到这一点,但对我来说最自然的一件事是将其视为与广播的元素乘法,并将函数视为运算符。所以我想做类似的事情
functions_arr*a
并得到效果
array([[act_on_int(1), act_on_float(2.0), act_on_str("three")],
[act_on_int(4), act_on_float(5.0), act_on_str("six") ]])
你知道按照这些思路实现目标的方法吗?
编辑:我将问题中数组的定义更改为包括dtype=[object]
,因为人们指出这对于数组以我想要的方式存储类型很重要。
感谢您的回答和评论!我已经接受了 senderles 的回答,并且觉得这与我的想法非常接近。
由于我似乎对如何将运算视为乘法感到有些困惑,让我用另一个例子来澄清一下:
如您所知,这样的操作:
v = array([1,2,3])
u = array([[5,7,11],
[13,17,19]])
v*u
v
将在行u
和产量上广播
array([[ 1*5, 2*7, 3*11],
[1*13, 2*17, 3*19]])
IE
array([[ 5, 14, 33],
[13, 34, 57]])
如果我们现在要替换v
为例如我们将拥有的del 运算符(以下实际上不是工作 python 代码:)
V = array([(d/dx),(d/dy),(d/dz)])
u = array([[5,7,11],
[13,17,19]])
V*u
屈服(精神上)
array([[(d/dx)5, (d/dy)7, (d/dz)11]],
[(d/dx)13,(d/dy)17,(d/dz)19]])
我承认对一堆常数求导并不是最有趣的运算,所以请随意用,和u
中的一些符号数学表达式替换。无论如何,我希望这至少让我的推理和标题中关于“(使用 python 函数作为运算符?)”的一点更清楚。x
y
z