我如何才能有效地更改代码,使其在不需要许多编程循环的情况下,从3维的2D数值数组A中减go 1D数值数组B,从而得到C[0,i,j]=A[i,j]-B[0]和C[1,i,j]=A[i,j]-B[1].

import numpy as np
B=np.array([1, 100])
A=np.arange(4*5).reshape(4,5)
#C=A-B this will not work as A and B have different number of columns
#A=array([[ 0,  1,  2,  3,  4],
#        [ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14],
#        [15, 16, 17, 18, 19]])

推荐答案

你需要播放B到3D:

C = A - B[:, None, None]

输出:

array([[[  -1,    0,    1,    2,    3],
        [   4,    5,    6,    7,    8],
        [   9,   10,   11,   12,   13],
        [  14,   15,   16,   17,   18]],

       [[-100,  -99,  -98,  -97,  -96],
        [ -95,  -94,  -93,  -92,  -91],
        [ -90,  -89,  -88,  -87,  -86],
        [ -85,  -84,  -83,  -82,  -81]]])

与循环的比较:

I, J = A.shape

C2 = np.zeros((2, I, J))

for i in range(I):
    for j in range(J):
        C2[0, i, j] = A[i,j] - B[0]
        C2[1,i,j] = A[i,j] - B[1]
        
np.allclose(C, C2)
# True

Python相关问答推荐

在函数内部使用eval(),将函数的输入作为字符串的一部分

acme错误-Veritas错误:模块收件箱没有属性linear_util'

'discord.ext. commanders.cog没有属性监听器'

如何将双框框列中的成对变成两个新列

类型错误:输入类型不支持ufuncisnan-在执行Mann-Whitney U测试时[SOLVED]

如何让Flask 中的请求标签发挥作用

根据二元组列表在pandas中创建新列

在Python中动态计算范围

海上重叠直方图

当点击tkinter菜单而不是菜单选项时,如何执行命令?

字符串合并语法在哪里记录

如何检测鼠标/键盘的空闲时间,而不是其他输入设备?

查看pandas字符列是否在字符串列中

Tensorflow tokenizer问题.num_words到底做了什么?

使用Python TCP套接字发送整数并使用C#接收—接收正确数据时出错

提取最内层嵌套链接

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

我如何处理超类和子类的情况

为什么在不先将包作为模块导入的情况下相对导入不起作用

#将多条一维曲线计算成其二维数组(图像)表示