python - Numpy Elementwise 乘法,多列
问题描述
我有以下 numpy 代码。我有一个a
带有 3d 点的数组 ( ) 和另一个带有权重 ( b
) 的数组。我需要将每一行乘以相应行中a
的每个权重b
。我希望使这段代码更容易理解并消除循环。
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9, 10], [11, 12, 13, 14]])
c = np.zeros((2, 4, 3))
for i, row in enumerate(b):
for j, col in enumerate(row):
print('Mult:', a[i, :], '*', col)
c[i, j, :] = a[i, :] * col
print(c[0, :, :])
print(c[1, :, :])
这是输出。
Mult: [1 2 3] * 7
Mult: [1 2 3] * 8
Mult: [1 2 3] * 9
Mult: [1 2 3] * 10
Mult: [4 5 6] * 11
Mult: [4 5 6] * 12
Mult: [4 5 6] * 13
Mult: [4 5 6] * 14
[[ 7. 14. 21.]
[ 8. 16. 24.]
[ 9. 18. 27.]
[10. 20. 30.]]
[[44. 55. 66.]
[48. 60. 72.]
[52. 65. 78.]
[56. 70. 84.]]
解决方案
您可以对矩阵进行不同的整形,然后执行逐元素乘法:
a[:,None,:] * b[:,:,None]
所以如果a
是一个m×n -矩阵并且b
是一个m×p -矩阵,我们得到一个m×p×n -张量。对于给定的样本数据,我们得到:
>>> a[:,None,:] * b[:,:,None]
array([[[ 7, 14, 21],
[ 8, 16, 24],
[ 9, 18, 27],
[10, 20, 30]],
[[44, 55, 66],
[48, 60, 72],
[52, 65, 78],
[56, 70, 84]]])
推荐阅读
- python - 在 Python TextBlob 上:更新时限制模型的大小
- ruby-on-rails - 错误:尝试安装 Rails / Nokogiri 时无法构建 gem 原生扩展
- if-statement - Google 表格将 HTML 标记添加到单元格内的数字中
- node.js - 如何在节点,js中创建浏览器警报
- azure - 使用 .pfx 文件签署 JWT
- dispatch-async - 如何异步获取超时的xpc结果
- javascript - 动态合并(覆盖)2个javascript对象
- r - 在R中一次更改多个单词的拼写/一次替换多个单词
- agda - 证明两个依赖(AVL 树键值)对相等
- python - 通过字典为变量赋值