首页 > 解决方案 > 有人可以解释这个 Numpy 数组属性叫什么吗?

问题描述

我的代码如下:

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]

标签: pythonarraysnumpymatrixarray-broadcasting

解决方案


这只是正常的逐细胞增殖。因为您的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)

推荐阅读