需要一些关于 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 行执行一些操作 -- 让我们假设第三列和第二列之间的差异柱子。然后它将这些值存储在一个数组中——所以现在这个数组将具有以下值:
存储值 = [5, 63, 20]
然后它在第一列中搜索下一个相同的值:它看到有两个 2.3。然后它执行相同的操作(取第 3 列和第 2 列之间的差异)并附加 store_value 数组,所以现在:
存储值 = [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)
希望这是有道理的——如果我需要澄清一些事情,请发表评论
最佳答案
您可以使用 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
函数,您不需要对元素进行排序。根据您可能拥有的其他标准,还有其他几种方法可以解决此问题(例如,使用列表使用的内存比需要的多),但如果您的数据不是太多,此解决方案是清晰且实用的。
关于python - 具有特定数组条件的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385431/