Python 从数组设置变量

Python 从数组设置变量,python,arrays,numpy,variables,Python,Arrays,Numpy,Variables,我在处理我在做一个项目时得到的一些数据,并将其编码为: #解析txt文件中的数据 data=numpy.loadtxt(inFileName+'.txt',skiprows=3) 频率=数据[:,0]#镜像频率(Hz) sdfreq=数据[:,1]#σ频率(Hz) dist=数据[:,2]#∆X(m) sddist=数据[:,3]#σ∆X(m) 我意识到最后4行看起来是重复的,如果我有1000多个数据参数,我显然不会重复这样做。我显然可以将其解析到字典中,但这会迫使我调用dataset['fr

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

#解析txt文件中的数据
data=numpy.loadtxt(inFileName+'.txt',skiprows=3)
频率=数据[:,0]#镜像频率(Hz)
sdfreq=数据[:,1]#σ频率(Hz)
dist=数据[:,2]#∆X(m)
sddist=数据[:,3]#σ∆X(m)

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

我不确定我是否理解您问题的各个方面,但我认为您的思路是正确的。这对你有帮助吗

将numpy导入为np
data=np.数组([[1,2,3,4],[5,6,7,8]]
def分配(数据):
结果=[]
对于范围内的i(data.shape[1]):
追加(列表(数据[:,i]))
返回结果
freq,sdfreq,dist,sddist=assign(数据)
或更短:

freq,sdfreq,dist,sddist=[list(data[:,i]),用于范围内的i(data.shape[1])]
说明:

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

对于每个列('i in range(data.shape)'),返回“data[:,i]”列,与手动操作相同


Cave:您需要跟踪列索引,如果数据集发生更改,则需要在确切位置插入新变量。从长远来看,a或a可能会有所帮助(特别是当涉及到1000多列时)。

我不确定我是否理解您问题的各个方面,但我认为您的思路是正确的。这对你有帮助吗

将numpy导入为np
data=np.数组([[1,2,3,4],[5,6,7,8]]
def分配(数据):
结果=[]
对于范围内的i(data.shape[1]):
追加(列表(数据[:,i]))
返回结果
freq,sdfreq,dist,sddist=assign(数据)
或更短:

freq,sdfreq,dist,sddist=[list(data[:,i]),用于范围内的i(data.shape[1])]
说明:

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

对于每个列('i in range(data.shape)'),返回“data[:,i]”列,与手动操作相同


Cave:您需要跟踪列索引,如果数据集发生更改,则需要在确切位置插入新变量。从长远来看,or可能会有所帮助(特别是当它涉及到1000多列时)。

只需使用
unpack=True

import numpy

data = numpy.loadtxt(inFileName + '.txt', skiprows=3 , unpack=True )
[freq, sdfreq, dist, sddist] = data

print(freq, sdfreq, dist, sddist)

只需使用
unpack=True

import numpy

data = numpy.loadtxt(inFileName + '.txt', skiprows=3 , unpack=True )
[freq, sdfreq, dist, sddist] = data

print(freq, sdfreq, dist, sddist)

如果它是一个元组,您可以执行
freq,sdfreq,dist,sddist=data
。我不确定numpy的等价物是什么。可能
freq,sdfreq,dist,sddist=data[:]
为什么需要将这些列分配给变量?我可以看到这样做4列,但1000?这四行没有什么特别的问题。其他人建议的解包可能很方便,但不一定更清晰。使用
dtype
names
可以获得结构化数组,您可以按名称访问字段,例如
data['freq']
等。如果是元组,则可以执行
freq、sdfreq、dist、sddist=data
。我不确定numpy的等价物是什么。可能
freq,sdfreq,dist,sddist=data[:]
为什么需要将这些列分配给变量?我可以看到这样做4列,但1000?这四行没有什么特别的问题。其他人建议的解包可能很方便,但不一定更清晰。使用
dtype
names
可以得到一个结构化数组,您可以按名称访问字段,例如
data['freq']
等。这是我想要的,但Danil的答案更适合我的问题。这就是我想要的,但丹尼尔的回答更适合我的问题。