我有一个二维NumPy数组,如下所示:
array([[0. , 0. , 0.2, 0.2],
[0.3, 0. , 0.3, 0. ]])
我想对其进行修改,以使每一行都由全0组成,除了第一个非零条目。如果全都是0,那么我们什么都不会改变。
我可以这样做:
example = np.array([[0,0, 0.2, 0.2], [0.3, 0, 0.3, 0]])
my_copy = np.zeros_like(example)
for i, row in enumerate(example):
for j, elem in enumerate(row):
if elem > 0:
my_copy[i, j] = elem
break
但这是丑陋的,不是矢量化的。关于如何将其向量化的任何建议?
谢谢!
答案 0 :(得分:5)
这是向量化的解决方案。诀窍是通过(?<1>\\S+)
转换和app.post('/api/cart', (req, res) => {
var cart = req.body;
req.session.cart = cart;
req.session.save(err, sessionCart) =>{
console.log(sessionCart);
if(err){ throw err; }
res.json(req.session.cart);
计算您的第一个非零条目。
bool
答案 1 :(得分:3)
简单
e =np.zeros(example.shape)
rows = np.arange(example.shape[0])
cols = np.argmax(example != 0, 1)
e[rows, cols] = example[rows, cols]
答案 2 :(得分:2)
设置
x = np.array([[0. , 0. , 0.2, 0.2],
[0.3, 0. , 0.3, 0. ],
[0. , 0. , 0. , 0. ]])
使用 logical_and
和 np.eye
:
m = (x!=0).argmax(1)
x[~np.logical_and(x, np.eye(x.shape[1])[m])] = 0
输出:
array([[0. , 0. , 0.2, 0. ],
[0.3, 0. , 0. , 0. ],
[0. , 0. , 0. , 0. ]])
使用此方法会比其他两个建议的方法慢一些。