python - Bucketize 实值张量
问题描述
我有一个这样的矩阵:
tf_ent = tf.Variable([ [9.96, 8.65, 0.8, 0.1 ],
[0.7, 8.33, 0 , 0 ],
[0.9, 0, 6, 7.33],
[6.60, 0, 3, 5.5 ],
[9.49, 0., 0, 0 ],
[0.4, 8.45, 0, 0.2 ],
[0.3, 0, 5.82, 8.28]])
我想得到一个输出,其中相同范围内的重量相同number
。
换句话说,这个数字很好地代表weight range
了矩阵中的 。
所以我理想的输出可能是这样的:
[[5, 5, 1, 1],
[1, 5, 0, 0],
[1, 0, 6, 5],
[4, 0, 2, 3],
[5, 0., 0, 0],
[1, 5, 0, 1],
[1, 0, 3, 5]]
在这种情况下,我用这个条件映射(考虑我有我的映射):
range(0.1, 1) -> 1
range( 1, 3) -> 2
range( 3, 5) -> 3
range(5, 7) -> 4
range (7, 10) -> 5
首先我尝试了tf.histogram_fixed_width_bins
但它没有给我预期的结果:这是我的代码:
value_ranges = [0, 10.0]
nbins = 5
new_f_w_t = tf.histogram_fixed_width_bins(tf_ent, value_ranges, nbins)
print(new_f_w_t)
这是这段代码的输出:
output= [[4 4 0 0]
[0 4 0 0]
[0 0 3 3]
[3 0 1 2]
[4 0 0 0]
[0 4 0 0]
[0 0 2 4]]
输出更像是获得这些浮点数的等效整数,而不是考虑任何范围。
如何以有效的方式获得矩阵的动态映射?
提前致谢:)
解决方案
这相当于一个np.digitize
操作。您可以使用math_ops._bucketize
:
from tensorflow.python.ops import math_ops
bins = [0.1, 1, 3, 5, 7, 10]
new_f_w_t = math_ops._bucketize(tf_ent, boundaries=bins)
new_f_w_t.numpy()
array([[5, 5, 1, 1],
[1, 5, 0, 0],
[1, 0, 4, 5],
[4, 0, 3, 4],
[5, 0, 0, 0],
[1, 5, 0, 1],
[1, 0, 4, 5]], dtype=int32)
推荐阅读
- sql - 如何创建存储过程?
- matlab - 解析函数输入时 Octave 5.1.0 中的 addOptional 失败
- json - 通过 jq 从 JSON 对象中提取数据到 Bash 中的 CSV
- excel - 我正在使用 VBA 代码将所有工作表更改存储到一个数组中,并在关闭之前使用所有“目标”发送电子邮件通知
- terraform - 如何使用 for 循环在多个区域创建 AWS 资源
- openlayers - 如何使用 openlayers 在同一层中具有两个或多个功能?
- hyperledger-iroha - 如何将资产与账户绑定
- python - 如何查找列表中每个长度的连续值序列的数量?
- mybatis - 使用对象的属性,该属性是映射器 XML 中的字符串数组
- javascript - 如何在 Javascript 中动态声明选择器?