gpt4 book ai didi

python - 使用 "genfromtxt"提取列

转载 作者:行者123 更新时间:2023-11-28 16:40:05 25 4
gpt4 key购买 nike

在问这个问题之前我已经阅读了这两个问题( q1 q2 )但是我没有找到任何令人满意的答案

我需要从二维数组中提取两列,而不是使用 pandasloadtxt,而是使用 genfromtxt

目前,我所做的是:

X = np.genfromtxt('File1.csv', 
delimiter='\t',
skip_header=0, skip_footer=0,
names=True , usecols=("Time") )

Y = np.genfromtxt('File1.csv',
delimiter='\t',
skip_header=0, skip_footer=0,
names=True , usecols=("Profit") )

然后,使用 matplotlib我绘制 Y vs X,结果完美

现在,我在想我应该以“正确”的方式去做,避免读取数组两次。所以我尝试了解包功能:

 X, Y = np.genfromtxt('File1.csv', 
delimiter='\t',
skip_header=0, skip_footer=0,
names=True , usecols=("Time", "Profit"), unpack=True )

我收到消息:要解压的值太多

现在,如果我在不解包的情况下使用一个输出向量(比如 Z)编写上一个命令,则向量 Z 将包含一个无法直接绘制的元组。

这个看似简单的问题有什么解决方案吗?

最佳答案

当您有多个命名字段时,您将有一个 1-d structured array ,像这样:

>>> np.genfromtxt('File1.csv', delimiter='\t', names=True, usecols=("Time", "Profit"))
array([(0.0, 1.0), (2.0, 3.0), (3.0, 4.0), (5.0, 6.0)],
dtype=[('Time', '<f8'), ('Profit', '<f8')])

您不能解压缩一维结构化数组,因为 unpack=True 所做的只是转置您的数组,以便列沿第一个轴变化,而一维数组的转置本身.因此,使用 unpack 会得到相同的结果:

>>> np.genfromtxt('File1.csv', delimiter='\t', names=True, usecols=("Time", "Profit"), unpack=True)
array([(0.0, 1.0), (2.0, 3.0), (3.0, 4.0), (5.0, 6.0)],
dtype=[('Time', '<f8'), ('Profit', '<f8')])

即使您像@Roberto 建议的那样在您的 usecols 参数中使用数字,您仍然会遇到问题,因为使用 names=True 会给您一个结构化数组,如果您有更多而不是一个字段(这就是为什么您在第一次尝试时没有注意到它)。

如果将其保存为 Z,则可以像这样绘制

plt.plot(Z['Time'], Z['Profit'])

或者您可以按照最初的要求拆分它:

X, Y = Z['Time'], Z['Profit']

关于python - 使用 "genfromtxt"提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com