我有一个清单。
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]]
答案 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.insert
和numpy.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
我想这很简单易懂。