如何用另一个数组创建或填充一个 numpy 数组?
How to create or fill an numpy array with another array?
如何创建形状为 [2, 2, 3]
的 numpy 数组,其中轴 2 的元素是另一个数组,例如 [1, 2, 3]
?
所以我想做一些类似这个无效代码的事情:
a = np.arange(1, 4)
b = np.full((3, 3), a)
生成如下数组:
[[[ 1. 2. 3.]
[ 1. 2. 3.]]
[[ 1. 2. 3.]
[ 1. 2. 3.]]]
当然可以像这样制作填充循环,但认为可能有捷径:
for y in range(b.shape[0]):
for x in range(b.shape[1]):
b[y, x, :] = a
有多种方法可以实现这一点。一种是为此使用 np.full
in np.full((2,2,3), a)
as pointed out by Divakar in the comments. Alternatively, you can use np.tile
,它允许您通过将输入数组重复给定次数来构造一个数组。要构建您的示例,您可以这样做:
import numpy as np
np.tile(np.arange(1, 4), [2, 2, 1])
如果你的 numpy 版本 >= 1.10 你可以使用 broadcast_to
a = np.arange(1,4)
a.shape = (1,1,3)
b = np.broadcast_to(a,(2,2,3))
这会生成一个视图而不是复制,因此对于大型数组来说会更快。
编辑这看起来是您在演示中要求的结果。
根据 Divakar 评论,答案也可以是:
import numpy as np
np.full([2, 2, 3], np.arange(1, 4))
还有一种可能性是:
import numpy as np
b = np.empty([2, 2, 3])
b[:] = np.arange(1, 4)
同时使用 np.concatenate
或其包装器 np.vstack
In [26]: a = np.arange(1,4)
In [27]: np.vstack([a[np.newaxis, :]]*4).reshape(2,2, 3)
Out[27]:
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3]]])
In [28]: np.concatenate([a[np.newaxis, :]]*4, axis=0).reshape(2,2, 3)
Out[28]:
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3]]])
如何创建形状为 [2, 2, 3]
的 numpy 数组,其中轴 2 的元素是另一个数组,例如 [1, 2, 3]
?
所以我想做一些类似这个无效代码的事情:
a = np.arange(1, 4)
b = np.full((3, 3), a)
生成如下数组:
[[[ 1. 2. 3.]
[ 1. 2. 3.]]
[[ 1. 2. 3.]
[ 1. 2. 3.]]]
当然可以像这样制作填充循环,但认为可能有捷径:
for y in range(b.shape[0]):
for x in range(b.shape[1]):
b[y, x, :] = a
有多种方法可以实现这一点。一种是为此使用 np.full
in np.full((2,2,3), a)
as pointed out by Divakar in the comments. Alternatively, you can use np.tile
,它允许您通过将输入数组重复给定次数来构造一个数组。要构建您的示例,您可以这样做:
import numpy as np
np.tile(np.arange(1, 4), [2, 2, 1])
如果你的 numpy 版本 >= 1.10 你可以使用 broadcast_to
a = np.arange(1,4)
a.shape = (1,1,3)
b = np.broadcast_to(a,(2,2,3))
这会生成一个视图而不是复制,因此对于大型数组来说会更快。 编辑这看起来是您在演示中要求的结果。
根据 Divakar 评论,答案也可以是:
import numpy as np
np.full([2, 2, 3], np.arange(1, 4))
还有一种可能性是:
import numpy as np
b = np.empty([2, 2, 3])
b[:] = np.arange(1, 4)
同时使用 np.concatenate
或其包装器 np.vstack
In [26]: a = np.arange(1,4)
In [27]: np.vstack([a[np.newaxis, :]]*4).reshape(2,2, 3)
Out[27]:
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3]]])
In [28]: np.concatenate([a[np.newaxis, :]]*4, axis=0).reshape(2,2, 3)
Out[28]:
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 2, 3],
[1, 2, 3]]])