gpt4 book ai didi

python - 锯齿状/参差不齐的 Numpy.array 的乘法定义是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:35 25 4
gpt4 key购买 nike

我不明白 Numpy.arrays 相乘时会发生什么。

例如,带有锯齿状(或参差不齐)的数组

import numpy as np
a = np.array([[1,2,3],[100,200]])
b = np.array([2, 4])
print(a * b)

我明白了

[[1, 2, 3, 1, 2, 3] [100, 200, 100, 200, 100, 200, 100, 200]]

但是,如果我稍微修改一下

import numpy as np
a = np.array([[1,2],[100,200]])
b = np.array([2, 4])
print(a * b)

我明白了

[[  2   8]
[200 800]]

我想找到数组乘法的定义。

最佳答案

您的主要问题是您的数组 a 不是“普通”数组,因为第二个维度不相等。如果你尝试 a.shape 你得到 (2,)a.dtype 给出 dtype('O')(表示对象),a[0].dtype 导致属性错误 'list' object has no attribute 'dtype'。这意味着您有一个 2 维的 numpy 数组,每个数组都包含一个 python 列表。

你应该查一下broadcasting ,但这不是根本原因。如果数组在操作期间不匹配,通常旨在将大小 1 的维度扩展到更大的值。它还有很多内容,但是文档非常清楚。对于您的特定问题,如果两个数组的维度匹配或其中一个为 1(从后向前计数,用 1 填充空值),广播意味着 numpy 不会抛出错误就足够了。

您有两个 (2,) 数组(a 包含 2 个列表,b 包含 2 个整数),这意味着维度适合(无需广播)。

这个“不当行为”的其余部分(它不是)与 numpy 无关,因为在标准 python 中(它起作用是因为 a 包含 python 列表)将列表与 a 相乘标量经常复制和附加列表。

所以

>>>[1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

同样的事情发生在你的例子中:a 中的第一个列表乘以 2,第二个列表乘以 4

关于python - 锯齿状/参差不齐的 Numpy.array 的乘法定义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40480846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com