Python 二维数组的numpy列表乘法
首先,如果这是明显的重复,请道歉。刚开始学习numpy,我完全没有语言来恰当地描述我的问题。话虽如此,我正在寻找在numpy实现这一点的正确方法 我试图将整数列表与numpy中2D数组中的对应行相乘。2D阵列是一个10x10棋盘状阵列,其构造如下: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::
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!我很感谢你为我解释其中的一些。