gpt4 book ai didi

python - 如果数组中的两个连续行在第一列中具有相同的字符串,则将第一行中的剩余条目设置为零

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

到目前为止,这是我的代码

y= n.genfromtxt('seguedata.txt', dtype=None, usecols = (0,1,2,5),)

for i in y:
if y[i][0] == y[i+1][0]:
y[i][1]=0
y[i][2]=0
y[i][3]=0

我得到了错误

IndexError                                Traceback (most recent call last)
<ipython-input-27-292d90264548> in <module>()
1 for i in y:
2 if y[i][0] == y[i+1][0]:
3 y[i][1]=0
4 y[i][2]=0
5 y[i][3]=0

IndexError: unsupported iterator index

segue 数据是一个包含 4 列的大型数据集,其中第一列是字符串,另外 3 列是数字。如果连续两行具有相同的初始字符串,我想将第一行的值设置为零。

谢谢

最佳答案

打印出i:

for i in y:
print(i)

您会看到它们是 y 行,而不是整数。由于 y 是一个结构化数组,y 可以通过整数或列名而不是行值的元组进行索引,因此 y[i] 引发错误

IndexError: unsupported iterator index

要通过对代码进行最少的调整来解决问题,您可以使用

for i in range(len(y)-1):
if y[i][0] == y[i+1][0]:
y[i][1]=0
y[i][2]=0
y[i][3]=0

应尽可能避免逐个元素地修改 NumPy 数组。对整个阵列或至少大片阵列进行操作会产生更好的效果性能。

在这种情况下,查找连续相等的行会更高效值(value)观:

mask = (y['f0'][1:] == y['f0'][:-1])

然后将 mask 为 True 的行的每一列中的所有值设置为零:

mask = np.concatenate([mask, [False]])
for col in y.dtype.names[1:]:
y[col][mask] = 0

关于python - 如果数组中的两个连续行在第一列中具有相同的字符串,则将第一行中的剩余条目设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30915373/

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