您好我是python和vectorization的新手。
假设您有一个像这样的5x3 numpy数组:
array([[ -1.262, -4.034, 2.422],
[ 13.849, 14.377, 4.951],
[ 3.203, 10.209, -2.865],
[ 3.618, -3.51 , -7.059],
[ -0.098, -5.012, 6.389]])
并且你希望最终得到一个新的5x2矩阵,从每个内部维度删除最小值,如下所示:
array([[ -1.262, 2.422],
[ 13.849, 14.377],
[ 3.203, 10.209],
[ 3.618, -3.51 ],
[ -0.098, 6.389]])
实现这一目标的最佳方法是什么?我想它是矢量化的吗?
谢谢!
答案 0 :(得分:0)
我认为这是一个相对简单的功能,但它可能不会出现在numpy中;大熊猫可能更容易做到这一点。
使用numpy,这是一种方法:
scrapy crawl Trousers_spider
布尔索引的步骤是"反转"从In [56]: a = np.array([[ -1.262, -4.034, 2.422],
[ 13.849, 14.377, 4.951],
[ 3.203, 10.209, -2.865],
[ 3.618, -3.51 , -7.059],
[ -0.098, -5.012, 6.389]])
In [57]: m = np.argmin(a, axis=1)
In [58]: indices = np.ones(shape=a.shape, dtype=bool)
In [59]: indices[np.arange(5), m] = False
In [60]: a[indices].reshape((-1, a.shape[1]-1))
Out[60]:
array([[ -1.262, 2.422],
[ 13.849, 14.377],
[ 3.203, 10.209],
[ 3.618, -3.51 ],
[ -0.098, 6.389]])
返回的索引,因为后者返回整数索引,而不是布尔索引。