由tensorflow的一些函數創建的數據和直接創建的list,tuple等數據使用是有一些區別的,故記錄以供查閱。
1. 索引的差別:
[(1,2),(3,4),(6,7)] 想要得到每一個tuple的第二個數,即[2,4,7]
a = [(1,2),(3,4),(6,7)]
a[:,1]
Traceback (most recent call last):
File "<ipython-input-6-140fc7631e6a>", line 1, in <module>
a[:,1]
TypeError: list indices must be integers or slices, not tuple
而
a[1]
Out[15]: (3, 4)
a[:][1] # 不明白這樣的結果
Out[16]: (3, 4)
tensor就很容易:
b=tf.constant([(1,2),(3,4),(6,7)])
with tf.Session() as sess:
print(b[:,1].eval())
output:[2 4 7]
歸其原因:b.shape=(3,2) 所以可以用矩陣的索引來處理
進一步,若用numpy聲明,則和tensor異曲同工:
c=np.array([(1,2),(3,4),(6,7)])
c[:,1]
Out[26]: array([2, 4, 7])
另外,list和numpy都可以用for循環,而tensor不可以
for i in b:
print(i)
Traceback (most recent call last):
File "<ipython-input-33-5049783fdcea>", line 1, in <module>
for i in b:
TypeError: Tensor objects are not iterable when eager execution is not enabled. To iterate over this tensor use tf.map_fn.