在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]])]
答案 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]])