我有两个系列X和Y,在Python中有一个函数f(X,Y)。我想生成一个矩阵,其中包含X和Y的每个组合的函数的输出。例如,如果函数只是一个简单的乘法,它将如下所示:
1 2 3 4 5
-------------------
1 | 1 2 3 4 5
2 | 2 4 6 8 10
3 | 3 6 9 12 15
4 | 4 8 12 16 20
5 | 5 10 15 20 25
X和Y实际上是坐标对,我想应用的函数是到geopy包的vincenty距离。在
X和Y是pandas数据帧的一系列,因为我从excel电子表格中读取数据,我发现pandas read_excel功能非常方便。在
我需要道歉,因为我觉得这个问题已经得到了回答。我的问题是我不知道这个手术叫什么,我应该找什么。我发现的是矩阵和向量乘法的不同例子,但我不想用两个级数来计算标量。在
非常感谢!在
我尝试按建议使用阵列广播,但仍有一个问题:
^{pr2}$还有另一个问题:即使我只想将vincenty公式应用于数据帧中的序列,也会收到一条错误消息:
for i in data.index:
print(vincenty((data['X'], data['Y']), (data['Y'], data['Y'])).meters)
>> ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
问题是我不知道我是怎么得到这些错误的。我可以给出四个单独的值作为vincenty公式的坐标,或者一个列表或一个字符串,这样就可以了。但是我可以将公式应用到多个条目的唯一方法是使用列表。在
好吧,最后一次编辑。。。我不能完全按照你的建议去做。相反,我将pandas系列转换为列表,并使用公式循环查看列表。我想这是最低效的方法,但这是我能用我的编程技巧和性能来做的,对我来说并不重要。但是,我很感谢您的建议(itertools,array broadcasting),对于其他应用,我会记住它们。非常感谢你!在
为您提供一个包含值的生成器,您可以根据需要对其进行整形和打印。替代品操作员.mul与你需要应用的相关功能。在
免责声明:这个答案是建立在pv.的基础上的,仅仅是对她/他的回答的一点评论。
注意,向数据添加新轴的方式意味着在结果矩阵中进行换位,您要做的最终取决于您喜欢如何读取结果,如在代数中(
x
是行,y
是列),或者就像地图一样(x
是经度,y
是纬度)习惯用法是这样的:编写函数f(x,y),这样它就可以对Numpy数组进行元素操作。 例如,如果您想计算
f(x,y) = x**2 + y**2
,这是因为幂和和运算是按元素进行的,所以表达式是可以的。同样对于乘法:
^{pr2}$然后使用阵列广播:
https://scipy-lectures.github.io/intro/numpy/operations.html#broadcasting(向下滚动一点可查看示例)
将itertools用于numpy数组通常不是一个好主意,除非您知道自己在做什么。在
相关问题 更多 >
编程相关推荐