У меня есть имена массивов тензорного потока tf-array
и имена пустых массивов np_array
.Я хочу найти конкретные строки в tf_array
относительно np-array
.
tf-array = tf.constant(
[[9.968594, 8.655439, 0., 0. ],
[0., 8.3356, 0., 8.8974 ],
[0., 0., 6.103182, 7.330564 ],
[6.609862, 0., 3.0614321, 0. ],
[9.497023, 0., 3.8914037, 0. ],
[0., 8.457685, 8.602337, 0. ],
[0., 0., 5.826657, 8.283971 ]])
У меня также есть np-массив:
np_array = np.matrix(
[[2, 5, 1],
[1, 6, 4],
[0, 0, 0],
[2, 3, 6],
[4, 2, 4]]
Теперь я хочу сохранить элементыв tf-array
, в котором комбинация n
(here n is 2)
из них (их индекс) имеет значение np-array
.Что это значит?
Например, в tf-array
, в первом столбце, индексы, которые имеют значение: (0,3,4)
.Есть ли в np-array
строка, содержащая любую комбинацию этих двух индексов: (0,3), (0,4) or (3,4)
.На самом деле такого ряда нет.Таким образом, все элементы в этом столбце стали zero
.
Индексы для второго столбца в tf-array
равны (0,1) (0,5) (1,5)
.Как видите, запись (1,5) доступна в np-array
в первом ряду.Вот почему мы сохраняем их в tf-array
.
. Таким образом, конечный результат должен быть таким:
[[0. 0. 0. 0. ]
[0. 8.3356 0. 8.8974 ]
[0. 0. 6.103182 7.330564 ]
[0. 0. 3.0614321 0. ]
[0. 0. 3.8914037 0. ]
[0. 8.457685 8.602337 0. ]
[0. 0. 5.826657 8.283971 ]]
Я ищу очень эффективный подход, так как у меня есть большое количество данных.
Update1
Я мог бы получить это с помощью приведенного ниже кода, который дает True
, где есть значение и нулевая маска для false
:
[[ True True False False]
[False True False True]
[False False True True]
[ True False True False]
[ True False True False]
[False True True False]
[False False True True]]
with tf.Session() as sess:
where = tf.not_equal(tf-array, 0.0)
print(sess.run(where))
Но как сравнить эту матрицу с np_array
?
Заранее спасибо!