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

Convert a vector into a numpy array; discritize them into bins

我有一个矢量,例如 v=[0.001, 0.13, 0.2, ..., .9],长度为 36501 之间的所有值。我想把它变成一个大小为 365-by-100 的 2D numpy 数组,即创建大小为 0.01 的 bin 并查看 v 的给定元素在 1 中的给定 day 上属于哪个 bin -365.

让我调用二维数组M。我想在 M[1, 0] 中设置 1 因为第一天的 v[0] 属于第一个 bin。

似乎下面给出了 M 中的 location/indicies (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。

与其制作一个 99% 的矩阵都为 0 的大矩阵,您可能会发现简单地四舍五入到最接近的 1/100 很有用,即四舍五入到 2 位数字:

np.round(arr, 2)

我不明白为什么您不想在这种情况下使用 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 数组和用于索引的排列数组。

或者,如果此功能确实是您代码中的瓶颈,请重写 numba 中的函数。

祝你好运!