python - NumPy:创建类似于 "repeat"的 bool 数组,但在多个维度中

标签 python numpy multidimensional-array scipy

我想我正在寻找与 sum() 相反的东西。我们开始吧:

x = array([
    [False, False, False, False, False],
    [ True, False, False, False, False],
    [ True,  True, False, False, False],
    [ True,  True,  True, False, False]])

x.sum(axis=1)
Out: array([0, 1, 2, 3])

所以我想走相反的方向:从 [0,1,2,3] 到像 x 这样的数组(我可以指定我的列数)当然,要在 x 中,上面是 5)。

理想情况下,该解决方案也应该适用于更高的维度,当然我不想在 Python 中循环,因为输入可能比这个示例更长。也就是说,这是一个使用循环的解决方案:

s = np.array([0, 1, 2, 3])
y = np.zeros((len(s), 5), np.bool)
for row,col in enumerate(s):
    y[row,0:col] = True

最佳答案

IIUC——我不确定我是否这样做——你可以使用arange和广播比较:

>>> v = np.array([0,1,3,2])
>>> np.arange(5) < v[...,None]
array([[False, False, False, False, False],
       [ True, False, False, False, False],
       [ True,  True,  True, False, False],
       [ True,  True, False, False, False]], dtype=bool)

或二维:

>>> v = np.array([[1,2],[0,2]])
>>> np.arange(5) < v[...,None]
array([[[ True, False, False, False, False],
        [ True,  True, False, False, False]],

       [[False, False, False, False, False],
        [ True,  True, False, False, False]]], dtype=bool)
>>> ((np.arange(5) < v[...,None]).sum(2) == v).all()
True

关于python - NumPy:创建类似于 "repeat"的 bool 数组,但在多个维度中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26310897/

相关文章:

python - 拟合曲线时如何修复 "TypeError: f() takes 3 positional arguments when 4 were given error"

javascript - 使用 javascript 将平面数组转换为嵌套数组

在Linux上模拟键盘/鼠标输入的Python库?

python - 如何在 tkinter 中创建具有 .png 背景的按钮

python - 如何将 .csv 训练数据提供给 mxnet 中的卷积神经网络?

python - Numpy:如何向量化应用于数据集的函数的函数形式的参数

python - 如何有效地改变数组中一定数量的值?

arrays - 快速处理 3-D 数组的每个维度

php - 使用包含两个元素的关联数组在多维数组中搜索唯一行

python - 如何将两个列表合并到字典中并对重复键的值求和