繁体   English   中英

将一个向量转换成一个numpy数组; 将它们区分为垃圾箱

[英]Convert a vector into a numpy array; discritize them into bins

我有一个向量,比如v=[0.001, 0.13, 0.2, ..., .9] ,长度为365 01之间的所有值。 我想将它变成一个 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM