python - 是否有一种“numpy”方法将 1D Numpy 数组扩展到 2D,输出值取决于原始值?
问题描述
我有一个数字列表,称为“列表”,长度为 l,最大 N。所需的输出是一个形状为 [l, N] 的 numpy 数组,其中每一行都有 list[row_index] 1,其余为 0。
我已经用 for 循环完成了它,但我尽量不要将循环用于非顺序问题,因为 numpy 通常有一种很酷的方式来处理它。
例子:
Input:
N=5
list = [3,
2,
4,
2,
1,
0]
Desired Output:
[[1, 1, 1, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
我试过的方式:
for i in range(len(list)):
list[i] = np.concatenate(np.ones(list[i]), np.zeros(N-list(i)))
我得到了正确的结果,只是觉得还有一种更优雅的“numpy”方式。有什么想法吗?
解决方案
这将起作用:
l = [3, 2, 4, 2, 1, 0]
N = 5
np.where(np.arange(N) >= np.array(l)[np.newaxis].T, 0, 1)
这将创建一个数组,其中包含第一维中的一系列数字和另一个基于l
第二维的数组。每个大于或等于 in 对应元素的元素l
都设置为 0,每个元素小于 1。
这意味着,例如,对于l
(3) 中的第一个元素,结果集中将有 3 个元素为 1。
输出:
array([[1, 1, 1, 0, 0],
[1, 1, 0, 0, 0],
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
推荐阅读
- ionic-framework - 忽略对自签名证书的请求
- javascript - 使用 RollupJS 在网页中合并遗留 JS
- python - 使用先知时如何解决 AttributeError 错误?
- asp.net-mvc - 异步模式下 Kendo UI 上传小部件上的自定义事件
- python - Python AttributeError:“客户端”对象没有属性“命令”
- javascript - 如何检测组件何时离开画布?
- typescript - 重命名键时选择值
- azure - 如何通过 terraform 将 docker 镜像推送到 ACR
- c - 如何解决 Valgrind 问题:“可执行文件中没有调试符号(-arch x86_64)”
- django - REST为Django中的不同用户添加属性