从numpy数组

时间:2018-02-22 22:28:28

标签: python python-3.x numpy

这个问题是我上一篇文章的后续跟进:

Multiply each column of a numpy array with each value of another array

假设我有以下数组:

In [252]: k
Out[252]: 
array([[200, 800, 400, 1600],
       [400, 1000, 800, 2000],
       [600, 1200, 1200,2400]])

In [271]: f = np.array([[100,50],[200,100],[300,200]])

In [272]: f
Out[272]: 
array([[100,  50],
       [200, 100],
       [300, 200]])

如何从k中减去f以获得以下内容?

In [252]: g
Out[252]: 
array([[100, 750, 300, 1550],
       [200, 900, 600, 1900],
       [300, 1000, 900,2200]])

理想情况下,我希望尽可能减少步骤并与我在其他帖子中提供的解决方案一致,但任何解决方案都欢迎。

2 个答案:

答案 0 :(得分:3)

您可以使用np.tile,如下所示:

In [1]: k - np.tile(f, (1, 2))
Out[1]: 
array([[ 100,  750,  300, 1550],
       [ 200,  900,  600, 1900],
       [ 300, 1000,  900, 2200]])

此外,如果你碰巧知道f的每个维度均匀地划分k的相应维度(我假设你必须这样做,为了你想要的减法有意义),那么你可以稍微概括一下:

In [2]: k - np.tile(f, np.array(k.shape) // np.array(f.shape))
Out[2]: 
array([[ 100,  750,  300, 1550],
       [ 200,  900,  600, 1900],
       [ 300, 1000,  900, 2200]])

答案 1 :(得分:1)

您可以重新塑造k,以便在两个方面适合f,并使用广播:

>>> g = (k.reshape(f.shape[0], -1, f.shape[1]) - f[:, None, :]).reshape(k.shape)

array([[ 100,  750,  300, 1550],
       [ 200,  900,  600, 1900],
       [ 300, 1000,  900, 2200]])