多维数组上的减法运算

时间:2014-01-13 09:20:52

标签: python numpy

我有一个清单。

l = [[1, 2, 8] [8, 2, 7] [7, 2, 5]]

我希望第一个元素为零,然后我需要按列减去值 解释:

1 2 8
8 2 7
7 2 5

减法为,

0 1 6
0 -6 5
0 -5 3

我希望输出为:

l = [[0, 1, 6], [0, -6, 5], [0, -5, 3]]

如果我有大型列表,这是执行此操作的更快方法吗?

我正在使用numpy但我在这里改变了以便易于理解 我的numpy数组对象是

l = [[1  2  8] [8  2  7] [7  2  5]]

3 个答案:

答案 0 :(得分:4)

>>> l = np.array([[1, 2, 8], [8, 2, 7], [7, 2, 5]])
>>> l[:, 1:] -= l[:, :-1]
>>> l[:, 0] = 0
>>> l
array([[ 0,  1,  6],
       [ 0, -6,  5],
       [ 0, -5,  3]])

答案 1 :(得分:2)

使用numpy.insertnumpy.diff

>>> import numpy as np
>>> a = np.array([[1, 2, 8], [8, 2, 7], [7, 2, 5]])
>>> np.insert(np.diff(a), 0, 0, axis=1)
array([[ 0,  1,  6],
       [ 0, -6,  5],
       [ 0, -5,  3]])

答案 2 :(得分:1)

没有numpy,你可以逃脱这个

l = [[1,  2,  8], [8,  2,  7], [7,  2,  5]]

def minus(rest, val):
    rest[-1] -= val
    rest.append(val)
    return rest

def myReduce(l):
    l2 = reduce(minus, l[-2::-1], [l[-1]])
    l2.reverse()
    l2[0] = 0
    return l2

l2 = map(myReduce, l)

print l2

我想这很简单易懂。