首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"genfromtxt“提取列

使用"genfromtxt“提取列
EN

Stack Overflow用户
提问于 2013-12-10 23:38:17
回答 1查看 5.3K关注 0票数 3

在问这个问题之前,我已经看过这两个问题了(q1q2),但我没有找到令人满意的答案

我需要从2D数组中提取两列,而不需要使用熊猫或loadtxt,而是使用genfromtxt

现在,我所做的是:

代码语言:javascript
复制
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 i图Y对X,结果是完美的。

现在,我在想,我应该用“正确”的方式去做,避免读取数组的两倍。因此,我尝试了解包特性:

代码语言:javascript
复制
 X, Y = np.genfromtxt('File1.csv', 
                    delimiter='\t', 
                    skip_header=0, skip_footer=0, 
                    names=True , usecols=("Time", "Profit"), unpack=True )

我得到了这样的信息:太多的值需要解包

现在,如果我为输出(例如Z)编写前面的命令,但没有解包,则向量Z将包含一个不能直接绘制的元组

这个简单的问题有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 23:57:20

当您有多个命名字段时,您将拥有一个一维结构化阵列,如下所示:

代码语言:javascript
复制
>>> 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获得相同的结果

代码语言:javascript
复制
>>> 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,则可以将其绘制为

代码语言:javascript
复制
plt.plot(Z['Time'], Z['Profit'])

或者,您可以按照您最初的要求将其分割:

代码语言:javascript
复制
X, Y = Z['Time'], Z['Profit']
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20507669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档