python - numpy 列表对二维数组的乘法
问题描述
首先,如果这是明显的重复,请道歉。刚开始使用 numpy,我完全缺乏正确描述我的问题的语言。话虽如此,我正在寻找正确的方法来做到这一点。
我正在尝试将整数列表与 numpy 中二维数组中的相应行相乘。二维数组是一个 10x10 类似棋盘的数组,构建如下:
import numpy as np
# build 10x10 array of zeros
a = np.array([[0]*10]*10)
# checkerboard out the array
a[::2,::2] = 1
a[1::2,1::2] = 1
# Result (so far so good - look at that checkerboard! Woohoo!)
print(a)
[[1 0 1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1 0 1]]
现在,我想建立我的整数范围以与我的 2D 棋盘相乘:
b = np.array(range(5,15))
print(b)
[ 5 6 7 8 9 10 11 12 13 14]
对我来说看起来范围很广,而且有 10 个值长 - 完美!现在,为了解决这个问题,我枚举并遍历b
(我的 int 列表),并手动将相应的行与 int 相乘,如下所示:
for i, n in enumerate(b):
a[i] = a[i] * n
print(a)
[[ 5 0 5 0 5 0 5 0 5 0]
[ 0 6 0 6 0 6 0 6 0 6]
[ 7 0 7 0 7 0 7 0 7 0]
[ 0 8 0 8 0 8 0 8 0 8]
[ 9 0 9 0 9 0 9 0 9 0]
[ 0 10 0 10 0 10 0 10 0 10]
[11 0 11 0 11 0 11 0 11 0]
[ 0 12 0 12 0 12 0 12 0 12]
[13 0 13 0 13 0 13 0 13 0]
[ 0 14 0 14 0 14 0 14 0 14]]
好的!虽然这是我想要实现的并且它有效,但在看到 numpy 在处理这样的数组方面的强大功能之后,这是首选的 numpy 方式吗?
解决方案
解决方案1:
(a*b).T
a*b
最初将所有列乘以 b 中的相应元素,然后您只需要转置。
array([[ 5, 0, 5, 0, 5, 0, 5, 0, 5, 0],
[ 0, 6, 0, 6, 0, 6, 0, 6, 0, 6],
[ 7, 0, 7, 0, 7, 0, 7, 0, 7, 0],
[ 0, 8, 0, 8, 0, 8, 0, 8, 0, 8],
[ 9, 0, 9, 0, 9, 0, 9, 0, 9, 0],
[ 0, 10, 0, 10, 0, 10, 0, 10, 0, 10],
[11, 0, 11, 0, 11, 0, 11, 0, 11, 0],
[ 0, 12, 0, 12, 0, 12, 0, 12, 0, 12],
[13, 0, 13, 0, 13, 0, 13, 0, 13, 0],
[ 0, 14, 0, 14, 0, 14, 0, 14, 0, 14]])
解决方案2:
b = b.reshape(-1,1) # make it colum vector
a*b
返回
array([[ 5, 0, 5, 0, 5, 0, 5, 0, 5, 0],
[ 0, 6, 0, 6, 0, 6, 0, 6, 0, 6],
[ 7, 0, 7, 0, 7, 0, 7, 0, 7, 0],
[ 0, 8, 0, 8, 0, 8, 0, 8, 0, 8],
[ 9, 0, 9, 0, 9, 0, 9, 0, 9, 0],
[ 0, 10, 0, 10, 0, 10, 0, 10, 0, 10],
[11, 0, 11, 0, 11, 0, 11, 0, 11, 0],
[ 0, 12, 0, 12, 0, 12, 0, 12, 0, 12],
[13, 0, 13, 0, 13, 0, 13, 0, 13, 0],
[ 0, 14, 0, 14, 0, 14, 0, 14, 0, 14]])
推荐阅读
- php - 具有组合的 Eloquent Model 静态方法
- c++ - 带有 int 变量的指针加法与带有 int 文字的加法不同吗?
- ruby-on-rails - 使用field_for时RecordInvalid的麻烦,即使属性存在也验证失败?
- java - Bean没有从不同的包自动装配
- ios - 如何在 Swift 上进行本地预定通知?
- python - 有没有办法在 Python 3 中快速打印和输出结果
- python - ABRICATE csv 的串联导致蛇形文件
- datetime - dart DateTime 差异错误(28.3 到 27.3 之间)
- java - 在 android studio 中使用 Firebase 记录数据验证用户数据
- java - 用于视图模型中实时数据的观察者的 Lambda 表达式