列表的列表中填充有元素/列表行彼此相减

时间:2018-11-17 10:13:01

标签: python list scipy broadcast subtraction

因此,我有一个 Nx1 列表,其中应从构成列表的所有其他元素中减去每行 (i->I) ,此列表应然后成为包含 I 行的另一个列表的一部分。目前,我一直在使用循环进行此操作,但我想知道广播是否有可能消除对循环的要求,就像scipy中pdist / cdist的工作方式一样。

例如:

An input matrix of: [1,2,4,7,9] 
should result in: [[0,1,3,6,8],[-1,0,2,5,7],[-3,-2,0,3,5],[-6,-5,-3,0,2],[-8,-7,-5,-2]]

谢谢!

2 个答案:

答案 0 :(得分:0)

肯定有更好的方法用numpy编写它,但这是一种方法:

将numpy导入为np

input = [1,2,4,7,9]

m = np.array(input * len(input)).reshape(len(input), len(input))
m - np.array(input).reshape(len(input), 1)

# array([[ 0,  1,  3,  6,  8],
#        [-1,  0,  2,  5,  7],
#        [-3, -2,  0,  3,  5],
#        [-6, -5, -3,  0,  2],
#        [-8, -7, -5, -2,  0]])

答案 1 :(得分:0)

如果anumpy.array,则最简单的解决方案是使用numpy.newaxis

>>> a=numpy.array([1,2,4,7,9])
>>> a-a[:,numpy.newaxis]
array([[ 0,  1,  3,  6,  8],
       [-1,  0,  2,  5,  7],
       [-3, -2,  0,  3,  5],
       [-6, -5, -3,  0,  2],
       [-8, -7, -5, -2,  0]])