如果数组中的两个连续行在第一列中具有相同的字符串,则将第一行中的其余项设置为z

2024-10-01 11:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我目前为止的代码

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 

我得到了错误

^{pr2}$

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

谢谢


Tags: 字符串代码intxtnonefordataif
1条回答
网友
1楼 · 发布于 2024-10-01 11:37:10

打印i

for i in y:
    print(i)

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

^{pr2}$

要在对代码进行最小调整的情况下解决此问题,可以使用

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数组元素。 在整个数组上操作,或者至少在其中的大片段上操作会产生更好的结果 性能。在

在这种情况下,查找连续相等的行会更有效 价值观:

^{4}$

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

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

相关问题 更多 >