gpt4 book ai didi

python - 将 NumPy ndarray 与另一个不同大小的二进制 ndarray 中的每个元素相乘

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:46 25 4
gpt4 key购买 nike

我有两个 ndarrays:

a = [[30,40],
[60,90]]

b = [[0,0,1],
[1,0,1],
[1,1,1]]

请注意形状可能更大但总是方阵 (50,50) , (100,100)想要的结果是:

Result = [[a*0,a*0,a*1],
[[a*1,a*0,a*1],
[[a*1,a*1,a*1]]

我设法用这段代码得到了正确的答案,但我认为 numpy 中会有一个内置函数可以快速完成这个任务

    totalrows=[]
for row in range(b.shape[0]):
cells=[]

for column in range(b.shape[1]):
print row,column
cells.append(b[row,column]*a)
totalrows.append(np.concatenate(cells,axis=1))
return np.concatenate(totalrows,axis=0)

最佳答案

确实有一个 NumPy 内置 np.kron对于这种基于 block 的逐元素乘法问题。为了解决你的情况,它可以像这样使用 -

np.kron(b,a)

sample 运行-

In [50]: a
Out[50]:
array([[30, 40],
[60, 90]])

In [51]: b
Out[51]:
array([[0, 0, 1],
[1, 0, 1],
[1, 1, 1]])

In [52]: np.kron(b,a)
Out[52]:
array([[ 0, 0, 0, 0, 30, 40],
[ 0, 0, 0, 0, 60, 90],
[30, 40, 0, 0, 30, 40],
[60, 90, 0, 0, 60, 90],
[30, 40, 30, 40, 30, 40],
[60, 90, 60, 90, 60, 90]])

3D阵列案例

现在,假设我们正在使用 a 作为 3D 数组 (m,n,p)b(q,r) 并假设您希望沿着 a 的最后一个轴迭代地执行这样的 block 乘法。因此,形状将沿两个输入的前两个轴相乘以获得输出数组。为了实现这样的输出,我们需要通过引入单例维度作为最后一个轴来扩展 b 的维度。最终输出的形状为 (m*q,n*r,p*1)。实现很简单 -

np.kron(b[...,None],a)

形状检查-

In [161]: a = np.random.randint(0,99,(4,5,2))
...: b = np.random.randint(0,99,(6,7))
...:

In [162]: np.kron(b[...,None],a).shape
Out[162]: (24, 35, 2)

关于python - 将 NumPy ndarray 与另一个不同大小的二进制 ndarray 中的每个元素相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121665/

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