【发布时间】:2018-01-20 02:05:24
【问题描述】:
我想将数组a 每一行中的前x 值替换为1,并保留所有其他值NaN。然而,前 x 值在每一行中都会发生变化,并由列表 b 确定。
由于我对数组不是很熟悉,我想我可以使用如下所示的 for 循环来执行此操作,但这不起作用 (我从How to set first N elements of array to zero? 获得了关于数组替换基础知识的灵感)。
In:
a = np.empty((3,4))
a.fill(np.nan)
b = [2,3,1]
for i in range(b):
a[0:b[i]] = [1] * b[i]
a[i:] = np.ones((b[i]))
pass
Out:
line 7:
ValueError: could not broadcast input array from shape (2) into shape (2,4)
结果应该是这样的:
Out:
[[1, 1, nan, nan],
[1, 1, 1, nan],
[1, nan, nan, nan]]
【问题讨论】:
-
当你发布这样的代码时,你应该说的不仅仅是“它不起作用”。哪里错了?什么样的错误?一个小的调整让它工作:
for i in range(3): a[i,0:b[i]] = 1你没有完全应用链接的答案。 -
@hpaulj 你说得对,为了完整起见,我现在添加了它。如果我使用你的调整,最后一行导致的错误出现
(ValueError: could not broadcast input array from shape (2) into shape (3,4))。如果我删除这一行,那真的很好! -
@hpaulj 我的错,它不起作用。整个数组都被填充了。但是,您的枚举解决方案非常完美
标签: python arrays numpy indexing iteration