请仅使用NumPy:
import numpy as np
A = np.ones((5,5))*3
print A
[[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]]
B = np.ones((5,5))*5
print B
[[ 5. 5. 5. 5. 5.]
[ 5. 5. 5. 5. 5.]
[ 5. 5. 5. 5. 5.]
[ 5. 5. 5. 5. 5.]
[ 5. 5. 5. 5. 5.]]
C = np.ones((5,5))
C[0:2,0:2] = 99
print C
[[ 99. 99. 1. 1. 1.]
[ 99. 99. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]
[ 1. 1. 1. 1. 1.]]
字符串
A、B和C是给定的条件。我想计算A、B之间的最大值,其中C值为99;并将结果放入A中。下面的代码可以正确工作。
A[C==99] = np.max([A, B],axis=0)[C==99]
print A
型
预期结果是:
[[ 5. 5. 3. 3. 3.]
[ 5. 5. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3.]]
型
然而,我想知道是否有更好的方法来解决它。我的意思是更简单,更快,或更容易的方法...
2条答案
按热度按时间abithluo1#
您可以使用
np.where
将Divakar的解决方案转换为一行程序:字符串
语法是:
型
lndjwyie2#
您可以在这里使用
boolean indexing
,从而避免像这样调用np.max
-字符串
基本上,我们只在
B
中的值大于A
中的值的地方将值插入A
,从而复制max
条件,然后将其与C为99
和C==99
的条件重叠。这给了我们一个布尔数组或掩码,如第一行代码所列。然后,我们使用这个掩码来MapA
和B
,并在第二行代码中将掩码值从B传输到A。下面是一个示例运行(注意A中结束时的值与A中开始时的值相比发生了变化)-
型