因此,我有一个 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]]
谢谢!
答案 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)
如果a
是numpy.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]])