首页 > 解决方案 > 从数组中设置变量

问题描述

我正在处理一些我在做一个项目时得到的数据并编码:

# Parse data from txt file
data = numpy.loadtxt(inFileName + '.txt', skiprows=3)
freq = data[:, 0]   # Mirror Frequency (Hz)
sdfreq = data[:, 1] # σ Frequency (Hz)
dist = data[:, 2]   # ∆X (m)
sddist = data[:, 3] # σ ∆X (m)

我意识到最后 4 行看起来是重复的,如果我还有 1000 个数据参数,我显然不会重复这样做。我显然可以将它解析成字典,但这会迫使我调用dataset['freq'][0]而不是简单地调用freq[0]. 我也可以将它解析成一个对象并调用dataset.freq[0],这样会更好。但是,有没有一种方法可以压缩代码并且仍然能够使用freq[0](不使用exec())?

标签: pythonarraysnumpyvariables

解决方案


我不确定我是否了解您问题的各个方面,但我认为您走在正确的轨道上。这对你有帮助吗?

import numpy as np

data = np.array([[1,2,3,4],[5,6,7,8]])

def assign(data):
    result = []

    for i in range(data.shape[1]):
        result.append(list(data[:,i]))

    return result

freq, sdfreq, dist, sddist = assign(data)

或更短:

freq, sdfreq, dist, sddist = [list(data[:,i]) for i in range(data.shape[1])]

解释:

您可以将列分配给单个变量,而不是将数据解析到字典中:

对于每一列('i in range(data.shape 1 )')返回列 'data[:,i]',就像您手动执行的那样。

洞穴:您需要跟踪列索引,如果您的数据集发生更改,您需要在确切位置插入一个新变量。从长远来看,结构化表格pandas可能会有所帮助(尤其是在涉及 1000 多列时)。


推荐阅读