【问题标题】:Matrix minus matrix in Python/Numpy [closed]Python / Numpy中的矩阵减矩阵[关闭]
【发布时间】:2021-11-12 01:00:19
【问题描述】:

我对 Numpy 中的矩阵减矩阵感到困惑。给定一个大小为 10 x 1 的向量 v 和一个大小为 10 x 20 的矩阵 X。为什么我们可以在 Python 中计算 v-X?这个结果是什么意思?

例如,v=[1,2,3,4,1,2,3,4,1,2]。我们无法计算 v-X。但是如果我们编码如下,我们可以计算 v-X:

v.reshape((10,1))
X-v

【问题讨论】:

  • 请在您的问题中提供更多详细信息。它仍然为猜测你在做什么留下了空间。你是如何构建你的向量/数组的。包括一个最小的例子。
  • 你的代码是什么?输出是什么?
  • @luk2302 我有一个数据集。我举一个例子。
  • 你使用 numpy 吗?
  • 你的编辑还是很保守的。首先提出一个有据可查的问题。只有这样人们才能帮助你。

标签: python numpy


【解决方案1】:

制作 2 个较小的数组:

In [128]: x = np.arange(6).reshape(2,3)
In [129]: x
Out[129]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [130]: v = np.array([10,20])

不能减:

In [131]: x-v
Traceback (most recent call last):
  File "<ipython-input-131-e16f27714407>", line 1, in <module>
    x-v
ValueError: operands could not be broadcast together with shapes (2,3) (2,) 

错误解释了原因。但是把(2,)改成(2,1):

In [132]: v[:,None]
Out[132]: 
array([[10],
       [20]])
In [133]: x-v[:,None]
Out[133]: 
array([[-10,  -9,  -8],
       [-17, -16, -15]])

或者如果我们添加,动作可能会更好:

In [134]: x+v[:,None]
Out[134]: 
array([[10, 11, 12],
       [23, 24, 25]])

根据broadcasting 的基本规则,(2,3) 数组和 (2,1) 确实可以一起工作。

A (3,) 可以添加到 (2,3) - 这与添加 (1,3) 相同,同样遵循 broadcasting 的基本规则:

In [135]: x+np.array([10,20,30])
Out[135]: 
array([[10, 21, 32],
       [13, 24, 35]])

https://numpy.org/doc/stable/user/basics.broadcasting.html

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 1970-01-01
    • 2013-03-25
    • 2021-12-30
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多