Python 二维数组的numpy列表乘法

Python 二维数组的numpy列表乘法,python,arrays,numpy,Python,Arrays,Numpy,首先,如果这是明显的重复,请道歉。刚开始学习numpy,我完全没有语言来恰当地描述我的问题。话虽如此,我正在寻找在numpy实现这一点的正确方法 我试图将整数列表与numpy中2D数组中的对应行相乘。2D阵列是一个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::

首先,如果这是明显的重复,请道歉。刚开始学习numpy,我完全没有语言来恰当地描述我的问题。话虽如此,我正在寻找在numpy实现这一点的正确方法

我试图将整数列表与numpy中2D数组中的对应行相乘。2D阵列是一个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]]
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]]
现在,我想建立我的整数范围,以与我的二维棋盘相乘:

b = np.array(range(5,15))
print(b)
[ 5  6  7  8  9 10 11 12 13 14]
在我看来是y型的,10个值长-完美!现在,为了解决这个问题,我枚举并循环了
b
(我的int列表),并手动将相应的行与int相乘,如下所示:

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]]
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
首先将所有列乘以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: 返回

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]])

首选的numpy方式是:
a*b[:,None]
。还要注意,对于创建
b
,您可以这样做:
np.arange(5,15)
@RaySteam-yup!想回答这个问题以便我能接受你的解决方案吗?谢谢我很酷,谢谢。请注意,如果你的代码工作,这是更好地张贴在你的男人!谢谢@RaySteam=]谢谢@makis!我很感谢你为我解释其中的一些。