NumPy在一维和二维数组上的点乘

3

我正在试图理解以下Python代码的作用:

Original Answer翻译成"最初的回答"

import numpy as np

numberList1 = [1,2,3]
numberList2 = [[4,5,6],[7,8,9]]

result = np.dot(numberList2, numberList1)

# Converting iterator to set
resultSet = set(result)
print(resultSet)

输出:

{32, 50}

我可以看到它正在将numberList1中的每个元素与numberList2中每个数组中相同位置的元素相乘 - 因此{1*4 + 2*5 + 3*6 = 32},{1*7+2*8+3*9 = 50}

但是,如果我更改数组为:


numberList1 = [1,1,1]
numberList2 = [[2,2,2],[3,3,3]]

那么我看到的输出是

{6, 9}

这是颠倒的...

如果我把它改成:

{6, 9}

numberList1 = [1,1,1]
numberList2 = [[2,2,2],[2,2,2]]

那么我看到的输出只是

{6}

从文档中可以了解到:

如果a是N维数组,而b是1维数组,则是在a和b的最后一个轴上执行求和乘积。

我不是足够的数学家以理解这告诉我的内容或者为什么输出的顺序有时会交换。

(注:Original Answer翻译成"最初的回答")


2
“set” 是一种无序的数据类型。您是否想创建一个 tuple?还是将其保留为 np.arraydot 的结果不是迭代器...),并且不将其放入其他数据类型中? - hiro protagonist
of course! Thank you - simonalexander2005
在文档中,“a和b的最后一个轴”是什么意思? - simonalexander2005
请参考以下链接:https://www.sharpsightlabs.com/blog/numpy-axes-explained/。 - hiro protagonist
谢谢!如果您想获得积分,请随意添加答案;否则我会处理。 - simonalexander2005
好的,已经完成了。谢谢! - hiro protagonist
1个回答

1

set是一种无序的数据类型,它可以去除重复项。np.dot不会返回迭代器(如您代码中所述),而是一个np.ndarray,其顺序将符合您的期望:

import numpy as np

numberList1 = [1, 2, 3]
numberList2 = [[4, 5, 6], [7, 8, 9]]

result = np.dot(numberList2, numberList1)
# [32 50]
# <class 'numpy.ndarray'>

# numberList1 = [1, 1, 1]
# numberList2 = [[2, 2, 2], [3, 3, 3]]
# -> [6 9]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接