gpt4 book ai didi

python - numpy 多重切片 bool 值

转载 作者:行者123 更新时间:2023-11-28 16:46:06 24 4
gpt4 key购买 nike

我在编辑 numpy 数组中的值时遇到问题

import numpy as np
foo = np.ones(10,10,2)

foo[row_criteria, col_criteria, 0] += 5
foo[row_criteria,:,0][:,col_criteria] += 5

row_criteria 和 col_criteria 是 bool 数组 (1D)。在第一种情况下,我得到一个

“形状不匹配:对象无法广播到单个形状”错误

在第二种情况下,+= 5 根本没有得到应用。当我做的时候

foo[row_criteria,:,0][:,col_criteria] + 5

我得到了一个修改后的返回值,但是就地修改该值似乎不起作用...

谁能解释一下如何解决这个问题?谢谢!

最佳答案

你想要:

foo[np.ix_(row_criteria, col_criteria, [0])] += 5

要了解这是如何工作的,请看这个例子:

import numpy as np
A = np.arange(25).reshape([5, 5])
print A[[0, 2, 4], [0, 2, 4]]
# [0, 12, 24]

# The above example gives the the elements A[0, 0], A[2, 2], A[4, 4]
# But what if I want the "outer product?" ie for [[0, 2, 4], [1, 3]] i want
# A[0, 1], A[0, 3], A[2, 1], A[2, 3], A[4, 1], A[4, 3]
print A[np.ix_([0, 2, 4], [1, 3])]
# [[ 1 3]
# [11 13]
# [21 23]]

同样的事情也适用于 bool 索引。此外,np.ix_ 并没有做任何真正令人惊奇的事情,它只是 reshape 了它的参数,以便它们可以相互广播:

i, j = np.ix_([0, 2, 4], [1, 3])
print i.shape
# (3, 1)
print j.shape
# (1, 2)

关于python - numpy 多重切片 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13598646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com