gpt4 book ai didi

python - 从 R 到 Python 的翻译 : index of last nonzero element in a row

转载 作者:太空宇宙 更新时间:2023-11-03 15:01:48 25 4
gpt4 key购买 nike

假设我有一个包含 10 行和 60 列的 R 数据框。从某一点开始,对于每一行,列中都有许多尾随零。最后一列包含类标识。例如:

1, 2, 3, 0, 0, 0, .., 0
1, 5, 9, 10, 2, 0, 0, ..., 1

第一行属于类别 0,第二行属于类别 1。它们每个都有许多零。我想隔离非零分量。

我有下面的 R 函数,它可以在 R 中运行:

keep_max = list()
for(i in 1:nrow(train_data)) {
keep_max[[i]] = max(which(train_data[i,1:(ncol(train_data)-1)] > 0))
}

[编辑:例如,对于上面给出的两行,这将返回一个包含元素 3 和 5 的列表,它们是每行中最后一个非零元素的索引(除了最后一个值,我不这样做)不想包含,因为它是一个类标签)]。

我正在寻找 Python 2.7 的等效版本。我尝试过:

for i in range(0, 10):
x1 = np.where(x_orig[i]==max(x_orig[i,:]))

但这给了我行的最大值,而不是行中最后一个非零元素的索引。

我也尝试过:

np.where(x_orig[i]==max(x_orig[i,(0:x_orig.shape[1]-1)] >0))

但我遇到语法错误。

如何使用 Python 2.7 找到行中最后一个非零元素的索引(最后一个条目除外,因为它可以是 0 的类标识)?

谢谢!

最佳答案

np.nonzero 命令将为您提供所有非零元素的索引。因此,如果您只想排除最后一列,我会这样做:

import numpy as np
x_orig = np.array([(1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0),
(1, 5, 9, 10, 2, 0, 0, 0, 0, 0, 1)])
row, col = np.nonzero(x_orig[:,:-1]) # these are the indices
row, col
>> (array([0, 0, 0, 1, 1, 1, 1, 1]), array([0, 1, 2, 0, 1, 2, 3, 4]))

现在,如果您想要最后一个非零项,您可以执行以下操作:

keep_max = []
for i in range(x_orig.shape[0]):
keep_max.append([i, col[row == i][-1]])
>> keep_max # again these are the indices of the last non-zero element for each row
[[0, 2], [1, 4]] # i.e. 1st row-3rd element, 2nd row-5th element

关于python - 从 R 到 Python 的翻译 : index of last nonzero element in a row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com