gpt4 book ai didi

Python - 将正整数拆分为数组的快速方法

转载 作者:行者123 更新时间:2023-12-01 21:21:50 32 4
gpt4 key购买 nike

我有一个形状为 (100000, 1) 的数组,数组中的每个元素都是一个不大于 6 的正整数。

我的目标是将每个元素转换为一个,并将这些元素放入一个形状为 (100000, 6) 的新矩阵中。

例如,

输入

X = np.array([[6],
[2],
[1],
...,
[5],
[4],
[3]])
# shape of X is (100000, 1)

输出

Y = np.array([[1, 1, 1, 1, 1, 1],
[1, 1, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[ ... ],
[1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0]])
# shape of Y is (100000, 6)

有没有什么方法可以不用循环就可以做到这一点?任何帮助将不胜感激。

最佳答案

使用 numpy.flipcumsum 的一种方法:

max_ = 6
np.flip(np.flip(np.eye(max_)[X.ravel()-1], 1).cumsum(1), 1)

输出:

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

以 100k 为基准:

x_large = np.random.randint(1, 7, 100000)
max_ = 6
%timeit np.flip(np.flip(np.eye(max_)[x_large.ravel()-1], 1).cumsum(1), 1)
# 6.71 ms ± 68.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

关于Python - 将正整数拆分为数组的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63715541/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com