Python While循环具有特定的数组条件
需要python代码和一些数组的帮助: 范例 我有一个txt文件,如下所示:Python While循环具有特定的数组条件,python,numpy,Python,Numpy,需要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 例如,3列数据和任意数量的行 我要做的是对每一列的所有相同的第一个条目进行一些操作 对于上面的示例:脚本查看并看到有3行,其中第一列为1——然后对这3行执行一些操作——假设取第三列和第二列之间的差异。然
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
例如,3列数据和任意数量的行
我要做的是对每一列的所有相同的第一个条目进行一些操作
对于上面的示例:脚本查看并看到有3行,其中第一列为1——然后对这3行执行一些操作——假设取第三列和第二列之间的差异。然后,它将这些值存储在一个数组中--因此现在这个数组将具有以下值:
存储_值=[5,63,20]
然后在第一列中搜索下一个相同的值:它看到有两个2.3。然后,它执行相同的操作(取第3列和第2列之间的差值)并附加store_值数组,因此现在:
存储_值=[5,63,20,41,19]
然后它再次搜索:查看两个3.1--执行上面相同的操作,并继续执行此操作,直到它遍历所有相同的值。txt是经过排序的——我认为这样更容易处理
最终存储_值=[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)
希望这是有意义的-如果我需要澄清一些事情,请发表评论您可以使用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
函数,您不需要对元素进行排序。根据您可能具备的其他条件(例如,使用列表使用的内存超过所需),有几种其他方法可以解决此问题,但如果您的数据不太多,则此解决方案清晰且功能正常。我认为问题很小,您可能过度考虑了此解决方案。我将根据我对你所问问题的理解来回答
currentline=next(data)
info=currentline.split()
info=['1','1','6']
希望这有帮助 您可以使用它来进行分组,它在分组方面比numpy更通用
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
"""
In [6]: groups=df.groupby(0)[[1,2]].apply(array)
"""
0
1.0 [[1, 6], [2, 65], [3, 23]]
2.3 [[2, 43], [4, 23]]
3.1 [[4, 45], [6, 35], [7, 15]]
5.0 [[3, 67], [9, 45]]
"""
In [7]: for label,points in groups.iteritems(): plot(*points.T,label=label);legend()
是的,我应该提到我有25000行数据,所以内存是个问题。我会试试这个方法,看看能坚持多久takes@renegade内存消耗是一回事,性能(速度)是另一回事。虽然有可能,但一般来说,两者兼备是很困难的,因为要获得更高的速度,您需要通过将内容放入ram来更快地访问。在任何情况下,25000行并不多,解决方案应该可以很好地工作。我应该提到我有25000行数据——因此内存是一个问题。您实际上没有内存问题。25000行乘3列乘8字节,每个浮点值为600kB。您的机器的内存是所需内存的1000-10000倍。