- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在努力寻找适用于以下文本文件格式的东西。我的总体目标是提取整个文本文件中变量名称之一的值。例如,我想要 B 行和 D 行的所有值。然后将它们放入普通的 numpy 数组中并运行计算。
数据文件如下所示:
[SECTION1a]
[a] 1424457484310
[b] 5313402937
[c] 873348378938
[d] 882992596992
[e] 14957596088
[SECTION1b]
243 62 184 145 250 180 106 208 248 87 186 137 127 204 18 142 37 67 36 72 48 204 255 30 243 78 44 121 112 139 76 71 131 50 118 10 42 8 67 4 98 110 37 5 208 104 56 55 225 56 0 102 0 21 0 156 0 174 255 171 0 42 0 233 0 50 0 254 0 245 255 110
[END SECTION1]
[SECTION2a]
[a] 1424457484310
[b] 5313402937
[c] 873348378938
[d] 882992596992
[e] 14957596088
[SECTION2b]
243 62 184 145 250 180 106 208 248 87 186 137 127 204 18 142 37 67 36 72 48 204 255 30 243 78 44 121 112 139 76 71 131 50 118 10 42 8 67 4 98 110 37 5 208 104 56 55 225 56 0 102 0 21 0 156 0 174 255 171 0 42 0 233 0 50 0 254 0 245 255 110
[END SECTION2]
这种模式持续了 N 个部分。
目前我读取了该文件并将其分成两列:
filename_load = fileopenbox(msg=None, title='Load Data File',
default="Z:\*",
filetypes=None)
col1_data = np.genfromtxt(filename_load, skip_header=1, dtype=None,
usecols=(0,), usemask=True, invalid_raise=False)
col2_data = np.genfromtxt(filename_load, skip_header=1, dtype=None,
usecols=(1,), usemask=True, invalid_raise=False)
然后我将使用 where 来查找我想要的值的索引,然后创建这些值的新数组:
arr_index = np.where(col1_data == '[b]')
new_array = col2_data[arr_index]
问题是,由于奇怪的文件格式,我最终得到了两种不同大小的数组,因此显然数组中的数据无法与正确的变量名称正确匹配。
我尝试了其他一些替代方案,但由于奇怪的文本文件格式以及如何将其读入 python 而陷入困境。
不确定我是否应该留在这个轨道上,如果是的话如何解决问题,或者尝试一种完全不同的方法。
提前致谢!
最佳答案
将数据排序到 OrdedDict()
字典层次结构中的可能解决方案:
from collections import OrderedDict
import re
ss = """[SECTION1a]
[a] 1424457484310
[b] 5313402937
[c] 873348378938
[d] 882992596992
[e] 14957596088
[SECTION1b]
243 62 184 145 250 180 106 208 248 87 186 137 127 204 18 142 37 67 36 72 48 204 255 30 243 78 44 121 112 139 76 71 131 50 118 10 42 8 67 4 98 110 37 5 208 104 56 55 225 56 0 102 0 21 0 156 0 174 255 171 0 42 0 233 0 50 0 254 0 245 255 110
[END SECTION1]
[SECTION2a]
[a] 1424457484310
[b] 5313402937
[c] 873348378938
[d] 882992596992
[e] 14957596088
[SECTION2b]
243 62 184 145 250 180 106 208 248 87 186 137 127 204 18 142 37 67 36 72 48 204 255 30 243 78 44 121 112 139 76 71 131 50 118 10 42 8 67 4 98 110 37 5 208 104 56 55 225 56 0 102 0 21 0 156 0 174 255 171 0 42 0 233 0 50 0 254 0 245 255 110
[END SECTION2]"""
# regular expressions for matching SECTIONs
p1 = re.compile("^\[SECTION[0-9]+a\]")
p2 = re.compile("^\[SECTION[0-9]+b\]")
p3 = re.compile("^\[END SECTION[0-9]+\]")
def parse(ss):
""" Make hierachial dict from string """
ll, l_cnt = ss.splitlines(), 0
d = OrderedDict()
while l_cnt < len(ll): # iterate through lines
l = ll[l_cnt].strip()
if p1.match(l): # new sub dict for [SECTION*a]
dd, nn = OrderedDict(), l[1:-1]
l_cnt += 1
while (p2.match(ll[l_cnt].strip()) is None and
p3.match(ll[l_cnt].strip()) is None):
ww = ll[l_cnt].split()
dd[ww[0][1:-1]] = int(ww[1])
l_cnt += 1
d[nn] = dd
elif p2.match(l): # array of ints for [SECTION*b]
d[l[1:-1]] = [int(w) for w in ll[l_cnt+1].split()]
l_cnt += 2
elif p3.match(l):
l_cnt += 1
return d
dd = parse(ss)
请注意,如果您使用现有的解析工具(例如 Parsley ),您可以获得更强大的代码。
要从所有部分检索'[c]'
,请执行以下操作:
print("All entries for [c]: ", end="")
cc = [d['c'] for s,d in dd.items() if s.endswith('a')]
print(", ".join(["{}".format(c) for c in cc]))
# Gives: All entries for [c]: 873348378938, 873348378938
或者你可以遍历整个字典:
def print_recdicts(d, tbw=0):
"""print the hierachial dict """
for k,v in d.items():
if type(v) is OrderedDict:
print(" "*tbw + "* {}:".format(k))
print_recdicts(v, tbw+2)
else:
print(" "*tbw + "* {}: {}".format(k,v))
print_recdicts(dd)
# Gives:
# * SECTION1a:
# * a: 1424457484310
# * b: 5313402937
# ...
关于python - 在Python中从文本文件读取数据并将其写入numpy列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651896/
作为脚本的输出,我有 numpy masked array和标准numpy array .如何在运行脚本时轻松检查数组是否为掩码(具有 data 、 mask 属性)? 最佳答案 您可以通过 isin
我的问题 假设我有 a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.arra
numpy 是否有用于矩阵模幂运算的内置实现? (正如 user2357112 所指出的,我实际上是在寻找元素明智的模块化减少) 对常规数字进行模幂运算的一种方法是使用平方求幂 (https://en
我已经在 Numpy 中实现了这个梯度下降: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
我有一个使用 Numpy 在 CentOS7 上运行的项目。 问题是安装此依赖项需要花费大量时间。 因此,我尝试 yum install pip install 之前的 numpy 库它。 所以我跑:
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) 在不同的机器学习和数据分析教程中,我看到这个种子集有不同的数字。选择特定的种子编号真的有区别吗?或者任何数字都可以吗?选择种子数的目标是相同实验的可重复性。
我需要读取存储在内存映射文件中的巨大 numpy 数组的部分内容,处理数据并对数组的另一部分重复。整个 numpy 数组占用大约 50 GB,我的机器有 8 GB RAM。 我最初使用 numpy.m
处理我想要旋转的数据。请注意,我仅限于 numpy,无法使用 pandas。原始数据如下所示: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
似乎 numpy.empty() 可以做的任何事情都可以使用 numpy.ndarray() 轻松完成,例如: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
我在大型 numpy 数组中有许多不同的形式,我想使用 numpy 和 scipy 计算它们之间的边到边欧氏距离。 注意:我进行了搜索,这与堆栈中之前的其他问题不同,因为我想获得数组中标记 block
我有一个大小为 (2x3) 的 numpy 对象数组。我们称之为M1。在M1中有6个numpy数组。M1 给定行中的数组形状相同,但与 M1 任何其他行中的数组形状不同。 也就是说, M1 = [ [
如何使用爱因斯坦表示法编写以下点积? import numpy as np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
假设我有 np.array of a = [0, 1, 1, 0, 0, 1] 和 b = [1, 1, 0, 0, 0, 1] 我想要一个新矩阵 c 使得如果 a[i] = 0 和 b[i] = 0
我有一个形状为 (32,5) 的 numpy 数组 batch。批处理的每个元素都包含一个 numpy 数组 batch_elem = [s,_,_,_,_] 其中 s = [img,val1,val
尝试为基于文本的多标签分类问题训练单层神经网络。 model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
首先是一个简单的例子 import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
我正在尝试平均二维 numpy 数组。所以,我使用了 numpy.mean 但结果是空数组。 import numpy as np ws1 = np.array(ws1) ws1_I8 = np.ar
import numpy as np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2]]) x[y] 预期输出: ar
我有两个数组 A (4000,4000),其中只有对角线填充了数据,而 B (4000,5) 填充了数据。有没有比 numpy.dot(a,b) 函数更快的方法来乘(点)这些数组? 到目前为止,我发现
我是一名优秀的程序员,十分优秀!