[英]Convert a vector into a numpy array; discritize them into bins
我有一个向量,比如v=[0.001, 0.13, 0.2, ..., .9]
,长度为365
。 0
和1
之间的所有值。 我想将它变成一个 2D numpy 大小为365-by-100
数组,即创建大小为 0.01 的 bin 并查看v
的给定元素在 1-365 的给定day
属于哪个 bin。
让我调用二维数组M
。 我想在M[1, 0]
中有1
因为第一天的v[0]
属于第一个 bin。
似乎下面给出了M
中的位置/索引(i,j)
必须变成 ```1````。
matrix_indecies = pd.cut(x=v, bins=np.arange(0, 1, 0.01), labels=False).to_frame().reset_index().to_numpy()
但是我不知道如何在没有 for-lopp 的情况下将正确的M[i,j]
转换为 1。
我不明白为什么您不想在这种情况下使用 for 循环。 似乎是一个简单的解决方案。
然而,这里有一个不使用 for 循环的版本。 我不确定 for 循环是更快还是更慢。
ones_indices = np.floor(v * n_bins)
M = np.zeros((len(v), n_bins), np.bool)
M[np.arange(len(v)), ones_indices] = 1
如果这是代码的性能关键部分的一部分,您可能需要预分配 M 数组和用于索引的 arange 数组。
或者,如果此功能确实是您代码中的瓶颈,请在numba
中重写 function。
祝你好运!
与其制作一个 99% 的矩阵都为 0 的大矩阵,您可能会发现简单地四舍五入到最接近的 1/100 很有用,即四舍五入到 2 位数字:
np.round(arr, 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.