我有一个n个值的数组,我想为每个值减去n个不同的值m次(每次从前一个结果中减去)。
我想保存整个矩阵。
我尝试了两个嵌套for循环,但我没有设法做到这一点,我找不到任何严格相关的帖子......
data = https://www.dropbox.com/s/anhyqq9f7h75qee/trace1.dat?dl=0
values_to_subtract =(data-k)/ m
k =常数值
示例:
x = np.array([x1,x2,x3])
m = 3
dx = (x-k)/m
我想减少其自身计算量 dx 的x的每个元素,我想做3次以获得此矩阵:
非常感谢
答案 0 :(得分:0)
使用broadcasting非常简单。
例如:
>>> import numpy as np
>>> dx = np.array([[1], [2], [3]])
>>> dx
array([[1],
[2],
[3]])
>>> dx * np.arange(4)
array([[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
>>> x = np.array([[10], [10], [10]])
>>> x - dx * np.arange(4)
array([[10, 9, 8, 7],
[10, 8, 6, 4],
[10, 7, 4, 1]])
通常,如果您的阵列具有兼容的形状,广播的作用是以很好的方式沿所有轴应用操作。所以在这一步:
>>> dx * np.arange(4)
array([[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
numpy正在使用outer product,即:
[1] [0 1*1 2*1 3*1]
[2] * [0 1 2 3] = [0 1*2 2*2 3*2]
[3] [0 1*3 2*3 3*3]
,这会提供您要从x
中减去的所有值。广播x - dx * np.arange(4)
采用列向量x
并将其广播到与外部产品相同的形状(复制每列的值),以便最终操作看起来像
[10 10 10 10] [0 1*1 2*1 3*1]
[10 10 10 10] - [0 1*2 2*2 3*2]
[10 10 10 10] [0 1*3 2*3 3*3]
等于你的LaTeX等式:
[x1 x1-dx x1-2dx x1-3dx]
[x2 x2-dx x2-2dx x2-3dx]
[x3 x3-dx x3-2dx x3-3dx]