【发布时间】:2017-02-21 01:28:04
【问题描述】:
正在试验 numpy 并发现这种奇怪的行为。 此代码工作正常:
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> a[:, 1].flat[:] = np.array([-1, -1])
>>> a
array([[ 1, -1, 3],
[ 4, -1, 6]])
但是为什么这段代码没有更改为 0 和 2 列的 -1 元素呢?
>>> a[:, [0, 2]].flat[:] = np.array([-1, -1])
>>> a
array([[ 1, -1, 3],
[ 4, -1, 6]])
以及如何编写代码,以便像这样更改为 0 和 2 列的 -1 元素?
UPD:在我的示例中必须使用 flat 或类似的 smt
UPD2:我根据这段代码做了一个有问题的例子:
img = imread(img_name)
xor_mask = np.zeros_like(img, dtype=np.bool)
# msg_bits looks like array([ True, False, False, ..., False, False, True], dtype=bool)
xor_mask[:, :, channel].flat[:len(msg_bits)] = np.ones_like(msg_bits, dtype=np.bool)
并且在使用通道 == 0 或 1 或 2 代码分配给 xor 掩码后可以正常工作,但如果通道 == [1,2] 或像这样的 smt,则不会发生分配
【问题讨论】:
-
不清楚为什么你需要使用
flat。正如下面已经回答的那样,flat可能会创建一个副本,因此您的更新可能不会更改原始数组。解释为什么你需要flat,也许你能找到解决方案。 -
@lbolla 更新问题
-
@ЮраМахоткин 看来你被困在
XY problem中了。 -
@Divakar 是的,你说得对。我将再次发布问题,但问题表述正确
标签: python arrays python-2.7 numpy slice