在问这个问题之前,我已经看过这两个问题了(q1和q2),但我没有找到令人满意的答案
我需要从2D数组中提取两列,而不需要使用熊猫或loadtxt,而是使用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 i图Y对X,结果是完美的。
现在,我在想,我应该用“正确”的方式去做,避免读取数组的两倍。因此,我尝试了解包特性:
X, Y = np.genfromtxt('File1.csv',
delimiter='\t',
skip_header=0, skip_footer=0,
names=True , usecols=("Time", "Profit"), unpack=True )我得到了这样的信息:太多的值需要解包
现在,如果我为输出(例如Z)编写前面的命令,但没有解包,则向量Z将包含一个不能直接绘制的元组。
这个简单的问题有什么解决办法吗?
发布于 2013-12-10 23:57:20
当您有多个命名字段时,您将拥有一个一维结构化阵列,如下所示:
>>> 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']https://stackoverflow.com/questions/20507669
复制相似问题