我有一个由nxd个数字组成的0array.对于该数组中的每一行,我的任务是将指定的列转换为1.为此,我得到了一个大小为n的列表,该列表的ith值是要转换为1的索引.

这个任务可以通过如下的for循环来完成:

import numpy as np

N=5; D =3
array = np.zeros(shape=(N,D))
ones_index = [0,2,1,0,1]
for row, column in enumerate(ones_index):
    array[row,column] = 1

虽然这个功能运行得很好,但我认为NumPy有一些功能可以更干净地实现上述功能.Does there exist a numpy function that converts a list of indices into a certain values in an array?

推荐答案

一个可能的解决方案:

array = np.zeros(shape=(N, D))

ones_index = [0, 2, 1, 0, 1]
array[np.arange(N), ones_index] = 1

print(array)

打印:

[[1. 0. 0.]
 [0. 0. 1.]
 [0. 1. 0.]
 [1. 0. 0.]
 [0. 1. 0.]]

编辑:快速基准将此答案与Onaymbu的答案进行比较:

import numpy as np
import perfplot


def get_identity_andrej(N, D, ones_index):
    array = np.zeros(shape=(N, D))
    array[np.arange(N), ones_index] = 1
    return array


def get_identity_onyambu(N, D, ones_index):
    return np.identity(max(ones_index) + 1)[ones_index]


np.random.seed(0)

perfplot.show(
    setup=lambda n: (n * 5, n * 3, np.random.randint(0, n * 3, size=n * 5)),
    kernels=[
        get_identity_andrej,
        get_identity_onyambu,
    ],
    labels=["andrej", "onyambu"],
    n_range=[1, 2, 3, 5, 10, 100, 250, 500, 1000],
    xlabel="N",
    logx=True,
    logy=True,
    equality_check=None,
)

在我的计算机(AMD 5700x)上,结果如下:

enter image description here

Python相关问答推荐

Python在tuple上操作不会通过整个单词匹配

scikit-learn导入无法导入名称METRIC_MAPPING64'

如何记录脚本输出

如何让Flask 中的请求标签发挥作用

图像 pyramid .难以创建所需的合成图像

我们可以为Flask模型中的id字段主键设置默认uuid吗

Python解析整数格式说明符的规则?

如何使用Python以编程方式判断和检索Angular网站的动态内容?

名为__main__. py的Python模块在导入时不运行'

如何从需要点击/切换的网页中提取表格?

Django admin Csrf令牌未设置

如何使用正则表达式修改toml文件中指定字段中的参数值

在电影中向西北方向对齐""

提取最内层嵌套链接

比较两个有条件的数据帧并删除所有不合格的数据帧

操作布尔值的Series时出现索引问题

Pythonquests.get(Url)返回Colab中的空内容

一维不匹配两个数组上的广义ufunc

为什么在生成时间序列时,元组索引会超出范围?

Python:使用asyncio.StreamReader.readline()读取长行