需要一些python代码和一些数组的帮助:
实施例
我有一个如下所示的txt文件:
1 1 6
1 2 65
1 3 23
2.3 2 43
2.3 4 23
3.1 4 45
3.1 6 35
3.1 7 15
5 3 67
5 9 45
E.G。 3列数据和任意行数
我想要做的是对列的所有相同的第一个条目的每个列进行一些操作。
所以对于上面的例子:脚本看起来并且看到有3行,其中第一列是1 - 然后它对这3行进行一些操作 - 让我们说取第三列和第二列之间的差异柱。然后它将这些值存储在一个数组中 - 所以现在这个数组将具有值:
store_values = [5,63,20]
然后在第一列中搜索下一个相同的值:它看到有两个2.3。然后它执行相同的操作(取第3列和第2列之间的差异)并附加store_value数组,所以现在:
store_values = [5,63,20,41,19]
然后再次搜索:看到两个3.1 - 上面做了同样的事情,并继续执行此操作,直到它运行所有相同的值。 txt是排序的 - 我认为这将更容易使用。
最终store_values = [5,63,20,41,19,41,29,8,64,36]
现在我使用了一个非常基本的例子,因为我知道我可以通过差异而不用担心第一列来获得上面的数组 - 但我的脚本正在做一些更复杂的事情,它必须依赖在第一列 - 例如,为相同的第一个条目绘制第3列和第2列,进行线性拟合,并将斜率存储在数组中。
到目前为止:
import numpy as np
data_file_name = 'whatever.dat'
data=np.loadtxt(data_file_name)
希望这是有道理的 - 如果我需要澄清一些事情,请发表评论
答案 0 :(得分:2)
您可以使用numpy中的unique
和where
来解决您的问题。这是代码:
import numpy as np
data_file_name = 'in.txt'
data=np.loadtxt(data_file_name)
unique = np.unique(data[:,0])
out = []
for i in unique:
ind = np.where(data[:,0]==i)
out.append(data[ind,2]-data[ind,1])
outarray = np.hstack(out)[0]
print(outarray)
,结果是:
[ 5. 63. 20. 41. 19. 41. 29. 8. 64. 36.]
使用unique
功能,您不需要整理元素。根据您可能具有的其他标准,还有其他几种方法可以解决此问题(例如,使用列表使用的内存比需要的多),但如果您的数据不是太多,则此解决方案清晰且有效。
答案 1 :(得分:2)
您可以使用pandas来执行此操作,这比分组的numpy更通用。
使用read_table:
In [5]: df=read_table('so.txt',header=None,sep='\s+')
"""
0 1 2
0 1.0 1 6
1 1.0 2 65
2 1.0 3 23
3 2.3 2 43
4 2.3 4 23
5 3.1 4 45
6 3.1 6 35
7 3.1 7 15
8 5.0 3 67
9 5.0 9 45
"""
答案 2 :(得分:0)
我认为问题很简单,你可能会过度思考解决方案。我会根据我对你问的理解来回答。
currentline = next(data)
info = currentline.split()
NB - ' info'变量将数据存储为列表。在您的情况下,对于第1行info = ['1', '1', '6']
希望这有帮助!