python - 将数组转换为序数回归编码的有效方法

标签 python arrays numpy

我有这个数组

import numpy as np
array = np.array([2, 3, 4])

我想把它映射到

[array([ 1.,  1.,  0.,  0.,  0.]), array([ 1.,  1.,  1.,  0.,  0.]), array([ 1.,  1.,  1.,  1.,  0.])]

这是迄今为止我找到的最好的解决方案

def ordinal_array(where_max, array_len=5):
    return np.hstack((np.ones((where_max)), np.zeros((array_len-where_max))))

list(map(ordinal_array,[2,3,4]))

但我想知道是否有更好的扩展性,因为我想将其应用于具有几百万个数据点的数组。

最佳答案

杠杆 broadcasting输入数组的大于 outer-comparisonarray_len 值的范围 -

In [14]: array
Out[14]: array([2, 3, 4])

In [15]: array_len = 5

In [16]: (array[:,None] > np.arange(array_len)).astype(float)
Out[16]: 
array([[1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0.],
       [1., 1., 1., 1., 0.]])

内置 NumPy -

In [23]: np.greater.outer(array, np.arange(array_len)).astype(float)
Out[23]: 
array([[1., 1., 0., 0., 0.],
       [1., 1., 1., 0., 0.],
       [1., 1., 1., 1., 0.]])

为了提高性能,请考虑转换为精度较低的 int 或什至将输出保留为 bool 数组(为此跳过 astype 转换)。

关于python - 将数组转换为序数回归编码的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551271/

相关文章:

C. 函数修改动态分配的二维数组时出现段错误

python - 按行降序排序 Nd Numpy 数组

python-3.x - Python 3 的进程之间共享多维数组

c++ - 用数据填充未指定大小的数组

python - 从 numpy 数组中删除一些数组元素

python - 类型错误 : can't multiply sequence by non-int of type 'float'

python - 关于 KERAS 中用于主题建模的文本自动编码器

python - 读取本地磁盘中保存的扩展名为 “.msg” 的电子邮件文件

python - 正则表达式 : matching and grouping a variable number of space separated words

java - 将 PNG 转换为 Bitmap 到 Byte[] 以存储在 SQL 中