python - 来自 2 个系列的笛卡尔积

标签 python python-3.x numpy

我有这个长度为 t 的大系列(t = 200K 行)

价格 = [200, 100, 500, 300 ..]

我想计算一个矩阵 (tXt),其中的值计算为:

matrix[i][j] = prices[j]/prices[i] - 1

我试过使用双 for,但它太慢了。有什么想法可以更好地执行它吗?

for p0 in prices:
    for p1 in prices:
        matrix[i][j] = p1/p0 - 1

最佳答案

矢量化解决方案正在使用 np.meshgrid ,以 prices1/prices 作为参数(注意 prices 必须是一个数组),并将结果相乘并减去 1 以便计算 matrix[i][j] = prices[j]/prices[i] - 1:

a, b = np.meshgrid(p, 1/p)
a * b - 1

举个例子:

p = np.array([1,4,2])

会给出:

a, b = np.meshgrid(p, 1/p)
a * b - 1

array([[ 0.  ,  3.  ,  1.  ],
       [-0.75,  0.  , -0.5 ],
       [-0.5 ,  1.  ,  0.  ]])

快速检查一些单元格:

(i,j)    prices[j]/prices[i] - 1
--------------------------------
(1,1)        1/1 - 1 = 0
(1,2)        4/1 - 1 = 3
(1,3)        2/1 - 1 = 1
(2,1)        1/4 - 1 = -0.75

另一种解决方案:

[p] / np.array([p]).T - 1

array([[ 0.  ,  3.  ,  1.  ],
       [-0.75,  0.  , -0.5 ],
       [-0.5 ,  1.  ,  0.  ]])

关于python - 来自 2 个系列的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955799/

相关文章:

python - pandas 应用正则表达式替换值

python - 我在代码底部附近收到一个列表不可调用错误,其中显示 ball.append,但我不知道如何修复它

python-3.x - 无法使用 robobrowser 提交表单。无效提交错误

python-3.x - 获取类型错误 : __init__() missing 1 required positional a rgument: 'on_delete'

python / NumPy : Efficiently store non-sparse large symmetric arrays?

python - 通过 django 1.8+ 中的 request.user 获取相关配置文件

Python theano.scan taps 参数

python-3.x - Python 3函数将 "Д"转换为字符串

python - 为什么 np.clip(pd.Series(range(10)), 2,3) 返回一个系列?

python - 如何在大小为 `n` 次 `m` (n≠m) 的非方阵的 numpy 数组上使用 c 函数进行计算