将向量转换为 numpy 数组;将它们区分为垃圾箱
Convert a vector into a numpy array; discritize them into bins
我有一个矢量,例如 v=[0.001, 0.13, 0.2, ..., .9]
,长度为 365
。 0
和 1
之间的所有值。我想把它变成一个大小为 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
中的函数。
祝你好运!
我有一个矢量,例如 v=[0.001, 0.13, 0.2, ..., .9]
,长度为 365
。 0
和 1
之间的所有值。我想把它变成一个大小为 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
中的函数。
祝你好运!