根据numpy数组中特定值的首次出现替换元素

假设有一个如下的numpy二维数组:

>>> x = np.array([[4,2,3,1,1], [1,0,3,2,1], [1,4,4,3,4]])>>> xarray([[4, 2, 3, 1, 1],       [1, 0, 3, 2, 1],       [1, 4, 4, 3, 4]])

我的目标是 – 在每一行中找到值4的首次出现,并将该行中的该元素(包括该元素本身)及之后的所有元素设置为0。因此,经过此操作后,转换后的数组应如下所示:

>>> x_newarray([[0, 0, 0, 0, 0],       [1, 0, 3, 2, 1],       [1, 0, 0, 0, 0]])

实现这一目标的pythonic且优化的方法是什么?我尝试使用np.argmax()np.take()的组合,但未能达到最终目标。


回答:

你可以使用列方向上的累积和(即axis=1)和布尔索引来实现:

n = 4idx = np.cumsum(x == n, axis=1) > 0x[idx] = 0

或者,可能更好的方法是进行累积的逻辑操作:

idx = np.logical_or.accumulate(x == n, axis=1)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注