python - Python/numpy/pandas 中函数 f(x,y) 结果的矩阵

标签 python numpy matrix pandas

我有两个系列 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 功能非常方便。

我需要道歉,因为我觉得这个问题已经得到解答。我的问题是我不知道这个操作叫什么以及我应该寻找什么。我发现的是矩阵和向量乘法的不同示例,但我不想用这两个级数计算标量。

非常感谢!

<小时/>

我尝试按照建议使用数组广播,但仍然遇到问题:

i = np.array(['(-39.736165,-73.238696)', '(-39.765165,-71.230696)', '(-40.736165,-73.230696)'])
j = np.array(['(-38.736165,-73.230696)', '(-35.736165,-73.230696)', '(-41.736165,-73.230696)'])
i = i[:, np.newaxis]
i.shape
(3,1)
PP = vincenty(i, j).meters

>> TypeError: don't know how to convert scalar number to float
<小时/>

另一个问题:即使我只想将 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、数组广播),并且我会在其他应用程序中记住它们。非常感谢!

最佳答案

习惯用法是这样的:编写函数 f(x,y) 以便它可以对 Numpy 数组进行元素操作。 例如,如果您要计算f(x,y) = x**2 + y**2,则为

def f(x, y):
    return x**2 + y**2

由于幂和和是按元素运算的,所以表达式就可以了。乘法也是如此:

def f(x, y):
    return x*y

然后使用数组广播:

x, y = np.asarray(x), np.asarray(y)  # ensure x, y are Numpy arrays
print f(x[:,np.newaxis], y[np.newaxis,:])

https://scipy-lectures.github.io/intro/numpy/operations.html#broadcasting (向下滚动一点查看工作示例)

将 itertools 与 numpy 数组一起使用通常在性能方面不是一个好主意,除非您知道自己在做什么。

关于python - Python/numpy/pandas 中函数 f(x,y) 结果的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517805/

相关文章:

python - python 中的 facebook 网络爬虫

python - 将 PIL 黑白图像转换为 Numpy 数组时出错

java 递归行

python - 获取已排序矩阵的索引

javascript - Python FastAPI : Returned gif image is not animating

python - Qt QFormLayout 标签向左对齐,值向右对齐

Python:如何动态生成代码?

python - 勒让德多项式导数

python - 使用 numpy 数组计算函数返回 inf 和 nan

c - 如何在C中为矩阵的特定位置赋值?