社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在两个ndarray之间执行广播二进制操作的Pythonic方法

mathguy • 5 年前 • 1711 次点击  

标题怎么说。我正在尝试执行以下任务:

1)在两个二维numpy数组之间执行二进制操作(如+、-、*、/、>、<), A1 , A2 , 哪里 A1.shape = (N1, N2_1) , A2.shape = (N1, N2_2) 生成形状为 (N, N2_1, N2_2)

2)在两个三维numpy数组之间执行二进制操作(如+、-、*、/、>、<), A1号 , A2型 , 哪里 A1.shape = (N1, N2, N3_1) , A2.shape = (N1, N2, N3_2) 生成其形状为 (N, N2, N3_1, N3_2)

我发现自己写了很多不符合语法的代码来完成第一个任务 1) . 如果有人能给我展示正确的pythonic代码示例来完成它,我将不胜感激。


我的尝试:

数据来源:

import numpy as np
n_row = 10000
n_col_a1 = 3
n_col_a2 = 4

a1 = np.tile(np.arange(n_col_a1), (n_row, 1))
a2 = np.tile(np.arange(n_col_a2), (n_row, 1))

我不通俗的广播尝试:

X1 = np.broadcast_to(a1, (n_col_a2, *a1.shape))
X1 = np.moveaxis(X1, 0, -1)

X2 = np.broadcast_to(a2, (n_col_a1, *a2.shape))
X2 = np.moveaxis(X2, 0, -2)

result_a1_minus_a2 = X1 - X2
print(result_a1_minus_a2)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49491
文章 [ 1 ]  |  最新文章 5 年前
hpaulj
Reply   •   1 楼
hpaulj    5 年前

两个输入数组必须扩展为:

(N1, N2_1)     => (N1, N2_1, 1)
(N1, N2_2)     => (N1, 1,    N2_2)
(N1, N2_1, N2_2)

例如

A1[:, :, None] * A2[:, None, :]

同样地:

(N1, N2, N3_1)
(N1, N2, N3_2)
(N1, N2, N3_1, N3_2)

A1[...,None] * A2[:,:,None,:]