【问题标题】:Can someone explain what this Numpy array property is called?有人可以解释这个 Numpy 数组属性叫什么吗?
【发布时间】:2020-02-04 08:33:23
【问题描述】:

我的代码如下:

import numpy as np
z = np.array([
        [1, 2],
        [3]
])

x = np.array([
        [4, 5]
])
print(np.multiply(x,z))

这个程序的输出创建了一个列表列表。这与应用于具有相同维度的数组的常规广播规则不同。这个属性有名字吗?另外为什么它在输出中明确提到单词列表?

[[list([1, 2, 1, 2, 1, 2, 1, 2]) list([3, 3, 3, 3, 3])]]
[Finished in 0.244s]

【问题讨论】:

  • 您可以查看文档here
  • z.dtype
  • 因为z是一个对象dtype数组,所以multiple实际上变成了一个列表推导式,涉及xz的元素。 [i*j for i,j in zip(x,z)]
  • 您的变量z 是一个包含lists 的数组。检查z的数据类型。

标签: python arrays numpy matrix array-broadcasting


【解决方案1】:

这只是正常的逐个单元格的乘法。因为您的 z 数组不是真正的矩阵(它没有正方形),Numpy 将其解释为包含两个对象的行:

>>> z
array([[1, 2], [3]], dtype=object)
>>> z.shape
(2,)

从这里你可以正常乘法 - 第一个对象乘以 4,第二个对象乘以 5:

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

只是普通的 Python 列表乘法 - 这是你得到的结果。实际上,您的结果不是“列表列表”。它是一个形状为(1, 2)dtype=object 的数组,所以一行有两个对象(恰好是列表):

>>> np.multiply(x,z)
array([[[1, 2, 1, 2, 1, 2, 1, 2], [3, 3, 3, 3, 3]]], dtype=object)
>>> np.multiply(x,z).shape
(1, 2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2012-10-26
    • 2020-05-02
    • 1970-01-01
    • 2021-12-11
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多