Python,在numpy数组中加载并列出一个.csv

2024-04-26 12:04:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在加载带有以下代码的.csv文件:

import csv
import numpy as np
import scipy.spatial

points = np.array([((int(R), int(G), int(B)),float(X), float(Y), float(Z))
              for R, G, B, X, Y, Z in csv.reader(open('XYZcolorlist_D65.csv'))])
    # load R,G,B,X,Y,Z coordinates of 'points' in a np.array  

print points 

而且效果很好。在

但是,如果我再加上这一行,我试图用scipy:http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Delaunay.html计算Delaunay三角剖分

^{pr2}$

我收到以下错误消息:

Traceback (most recent call last):
  File "C:\Users\gary\Documents\EPSON STUDIES\delaunay.py", line 15, in <module>
    tri = scipy.spatial.Delaunay(points[1, 2, 3])
IndexError: too many indices

显然语法scipy.spatial.Delaunay(points[1, 2, 3])不正确。在

我做错什么了?在

编辑:

如果更容易处理,我也可以使用这行来导入(np数组应该是相同类型的数据吗?)在

points = np.array([(float(R), float(G), float(B), float(X), float(Y), float(Z))
              for R, G, B, X, Y, Z in csv.reader(open('XYZcolorlist_D65.csv'))])
    # load R,G,B,X,Y,Z coordinates of 'points' in a np.array   

然后我需要跳过每行的前3个值。。。在


Tags: csvinimportfornpscipyopenfloat
2条回答

我不知道你到底想做什么,但也许是这样的…你可以用你的csv阅读器替换file_txt。在

>>> from scipy.spatial import Delaunay
>>> file_txt = [[255, 95, 127, 40.2, 26.5, 22.7], [255, 127, 127, 43.6, 32.3, 23.6], [255, 159, 127, 47.1, 39.1, 22.9], [0,0,0,0,0,0]]
>>> a = [list(map(float, row[3:])) for row in file_txt]
>>> a
[[40.2, 26.5, 22.7], [43.6, 32.3, 23.6], [47.1, 39.1, 22.9], [0.0, 0.0, 0.0]]
>>> Delaunay(a)
<scipy.spatial.qhull.Delaunay object at 0x0383FA30>

错误在于numpy数组的切片。要获得点的坐标,任何一种版本的代码都可以。在

代码的第一个版本,其中points的第一列是RGB值的元组:

tri = scipy.spatial.Delaunay(points[:, 1:])

第二个版本中,RGB值被展平,占据3列,您需要跳过三列:

^{pr2}$

实际上,您可以使用np.loadtxt读取数据(生成第二个版本):

^{3}$

相关问题 更多 >