我有这个长度为 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
,以 prices
和 1/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/