渴望执行
我已经通过 API 挖掘了 2 天,但我似乎无法找到一种方法来使用来自CsvDataset
对象的数据。
我有来自数据集的以下示例:
70,1,4,130,322,0,2,109,0,24,2,3,3,2
67,0,3,115,564,0,2,160,0,16,2,0,7,1
57,1,2,124,261,0,0,141,0,3,1,0,7,2
64,1,4,128,263,0,0,105,1,2,2,1,7,1
74,0,2,120,269,0,2,121,1,2,1,1,3,1
65,1,4,120,177,0,0,140,0,4,1,0,7,1
56,1,3,130,256,1,2,142,1,6,2,1,6,2
59,1,4,110,239,0,2,142,1,12,2,1,7,2
60,1,4,140,293,0,2,170,0,12,2,2,7,2
63,0,4,150,407,0,2,154,0,4,2,3,7,2
我阅读了他们在高级 API 视频中所说的 csv:
tf.enable_eager_execution()
defaults = [tf.float64] * 14
dataset=tf.data.experimental.CsvDataset(path, defaults)
>>> dataset
>>> <CsvDataset shapes: ((), (), (), (), (), (), (), (), (), (), (), (), (), ()), types: (tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64, tf.float64)>
但是从这里开始,我无法访问任何数据,例如获取列的值。
使用以下方法将数据集转换为列表:list(dataset)
不是一种选择,因为使用正常大小的 csv(约 190k 个样本)需要很长时间。
那么,有没有办法从这个对象中获取列值或行值?或者使用 TF 读取数据而不是使用 scikit/pandas 真的没有意义吗?
编辑1:
尝试col1 = dataset.map(lambda *row: row[0])
按照@kvish所说的那样做,这会返回一个<MapDataset shapes: (), types: tf.float64>
可迭代的。问题是必须遍历每一列然后遍历每一列MapDataset
会增加复杂性O(n^2)
。
想法输出将是张量列表,每个张量包含列中的所有值,类似于:
[<tf.Tensor(shape=(10,), dtype=float64,
numpy=array([70.0,67.0,57.0,64.0,74.0,65.0,56.0,59.0,60.0,63.0]))>,
(...) x14]