2016-11-24 29 views
13

Giả sử tôi có một mảng trong TensorFlow:Sorting một Array trong TensorFlow

[ 0.12300211, 0.51767069, 0.13886075, 0.55363625], 
[ 0.47279349, 0.50432992, 0.48080254, 0.51576483], 
[ 0.84347934, 0.44505221, 0.88839239, 0.48857492], 
[ 0.93650454, 0.43652734, 0.96464157, 0.47236174], .. 

Tôi muốn sắp xếp mảng này bằng cách cột thứ ba. Làm thế nào để tôi làm điều này? Tôi có thể sắp xếp từng cột riêng lẻ bằng cách sử dụng tf.nn.top_k(), cung cấp cho tôi các giá trị được sắp xếp và các chỉ mục tương ứng. Tôi có thể sử dụng các chỉ số của cột thứ ba này để sắp xếp lại những người khác, nhưng tôi không thể tìm thấy một Op sắp xếp lại.

Giả sử tôi muốn giữ cho mọi thứ trong đồ thị (không shenanigans Python):

  • Làm thế nào để loại/trật tự (các mảng ở trên) trong TensorFlow?
  • Tôi làm cách nào để đặt hàng lại trong TensorFlow khi tôi có chỉ số để sắp xếp lại?
+1

Nếu tôi hiểu câu hỏi của bạn, điều này có vẻ là một [mở vấn đề] (https://github.com/tensorflow/tensorflow/issues/288). Không có gì được nêu ra, nhưng tồi tệ hơn đến tồi tệ nhất, flatten và 'top_k'. – erip

+0

Điều đó sẽ không hoạt động nếu bạn muốn sắp xếp theo cột thứ ba hoặc sắp xếp lại với danh sách các chỉ mục. – TimZaman

+1

Bạn có thể sắp xếp lại đơn đặt hàng bằng cách sử dụng [tf.gather] (https://www.tensorflow.org/versions/r0.11/api_docs/python/array_ops.html#gather)? Có thể? – Lunaweaver

Trả lời

7

Các công trình sau đây:

a = tf.constant(...) # the array 
reordered = tf.gather(a, tf.nn.top_k(a[:, 2], k=4).indices)