如何使用给定的维数初始化一个空的Numpy数组?

3

我想要初始化一个空的6维张量,如下:

a = np.array([[[[[[]]]]]])

有比显式编写括号更好的方法吗?


我也不确定使用np.concatenate从底层构建这样的张量是否是一个好方法。 - Lenar Hoyt
你打算用那个空数组做什么? - Warren Weckesser
使用np.concatenate(a,b,axis=0)迭代地添加那个秩为1的行。 - Lenar Hoyt
1
这是一个非常糟糕的想法:如果您知道张量的最终大小,请从一开始就使用np.empty分配所有内容。如果您需要“从底部向上”构建它,则最好使用嵌套的Python列表,然后在结果上调用np.array - Jaime
5个回答

5
你可以使用emptyzeros
例如,要创建一个新的2x3数组,用零填充,请使用:numpy.zeros(shape=(2,3))

3
你可以像这样做:np.empty(shape = [1] * (dimensions - 1) + [0])。 例如:
>>> a = np.array([[[[[[]]]]]])
>>> b = np.empty(shape = [1] * 5 + [0])
>>> a.shape == b.shape
True

1
这应该可以做到:
x = np.array([])

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

1
您可以直接使用ndarray构造函数:
numpy.ndarray(shape=(1,) * 6)

或者选择变体,因为它似乎更受欢迎:
numpy.empty(shape=(1,) * 6)

1

使用np.concatenate(a,b,axis=0)迭代地添加那个秩为1的行。

不要这样做。迭代创建数组很慢,因为每一步都必须创建一个新数组。此外,ab在除连接维度之外的所有维度上都必须匹配。

np.concatenate((np.array([[[]]]),np.array([1,2,3])), axis=0)

会给您带来维度错误。

唯一可以连接到这样的数组的是一个具有0维大小的数组。

In [348]: np.concatenate((np.array([[]]),np.array([[]])),axis=0)
Out[348]: array([], shape=(2, 0), dtype=float64)
In [349]: np.concatenate((np.array([[]]),np.array([[1,2]])),axis=0)
------
ValueError: all the input array dimensions except for the concatenation axis must match exactly
In [354]: np.array([[]])
Out[354]: array([], shape=(1, 0), dtype=float64)
In [355]: np.concatenate((np.zeros((1,0)),np.zeros((3,0))),axis=0)
Out[355]: array([], shape=(4, 0), dtype=float64)

开始迭代工作,从一个空列表开始,并使用append添加数据; 然后在最后生成数组。 a = np.zeros((1,1,1,1,1,0)) 可以在最后一个轴上与另一个 np.ones((1,1,1,1,1,n)) 数组连接。
In [363]: np.concatenate((a,np.array([[[[[[1,2,3]]]]]])),axis=-1)
Out[363]: array([[[[[[ 1.,  2.,  3.]]]]]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接