获得连续副本的习语

时间:2018-05-21 12:50:46

标签: python-3.x numpy numpy-broadcasting

在numpy.broadcst-array的帮助下,引入了一个成语。 但是,这个成语提供与原始命令完全相同的输出。 Waht是"获得连续副本而不是非连续视图的意思。"?

https://docs.scipy.org/doc/numpy/reference/generated/numpy.broadcast_arrays.html

x = np.array([[1,2,3]])
y = np.array([[1],[2],[3]])

np.broadcast_arrays(x, y)
[array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]]), array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])]

这是获取连续副本而非非连续视图的有用习惯用法。

[np.array(a) for a in np.broadcast_arrays(x, y)]

[array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]]), array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])]

1 个答案:

答案 0 :(得分:1)

要了解差异,请尝试写入新数组:

让我们从相邻的副本开始。

>>> import numpy as np
>>> x = np.array([[1,2,3]])
>>> y = np.array([[1],[2],[3]])
>>> 
>>> xc, yc = [np.array(a) for a in np.broadcast_arrays(x, y)]
>>> xc
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

我们可以修改一个元素,不会发生意外。

>>> xc[0, 0] = 0
>>> xc
array([[0, 2, 3],
       [1, 2, 3],                                                                                                   
       [1, 2, 3]])
>>> x
array([[1, 2, 3]])

现在,让我们尝试使用广播的数组:

>>> xb, yb = np.broadcast_arrays(x, y)
>>> xb
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

虽然我们只写左上角的元素......

>>> xb[0, 0] = 0

......整个左栏将改变......

>>> xb
array([[0, 2, 3],
       [0, 2, 3],
       [0, 2, 3]])

...还有输入数组。

>>> x
array([[0, 2, 3]])