我有一个非常愚蠢的问题,但由于某种原因,我无法弄清楚该怎么做。我有一个多维的numpy数组,应该有以下形状:
(345138,30,300)
然而,它实际上有这样的形状:
(345138,1)
1元素数组中的是包含形状
的数组(30,300)
那我该如何移动"内部数组,以便形状正确吗?
目前它看起来像这样:
$(".button").click(function() {
$(".visible_div").addClass("hide");
});
$(".visible_div").on('transitionend', function() {
$(".invisible_div").addClass("show");
});
但是我希望没有数组(...),dtype = 32并将其中的内容移动到第一个数组中,以便形状为(345138,30,300),如下所示:
[[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0]], dtype=int32)]
[ array([[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
[0, 0, 0, ..., 0, 0, 0],
...,
有什么想法吗?
答案 0 :(得分:2)
看起来你有一个包含2d数组的二维数组(对象dtype)。我可以用以下方法构建一个:
In [972]: arr = np.empty(4,dtype=object)
In [973]: arr = np.empty((4,1),dtype=object)
In [974]: for i in range(4): arr[i,0]=np.ones((2,3),int)
In [975]: arr
Out[975]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
简单地将其包裹在np.array
中不起作用;不适用tolist
:
In [976]: np.array(arr)
Out[976]:
array([[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])],
[array([[1, 1, 1],
[1, 1, 1]])]], dtype=object)
In [977]: arr.tolist()
Out[977]:
[[array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])], [array([[1, 1, 1],
[1, 1, 1]])]]
扁平化的一种方式'是使用某些版本的concatenate
:
In [978]: np.stack(arr.ravel())
Out[978]:
array([[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]]])
In [979]: _.shape
Out[979]: (4, 2, 3)
我使用ravel
将外部数组缩减为1d,stack
可以将其用作列表。 stack
的行为类似于np.array
,因为它组合了新轴上的元素(我们可以指定)。
tolist
和array
可以协同工作:
In [981]: np.array(arr.tolist())
Out[981]:
array([[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]],
[[[1, 1, 1],
[1, 1, 1]]]])
In [982]: _.shape
Out[982]: (4, 1, 2, 3)
或tolist
加squeeze
(实际上是np.asarray(...).squeeze()
)
In [983]: np.squeeze(arr.tolist())
Out[983]:
array([[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]],
[[1, 1, 1],
[1, 1, 1]]])
In [984]: _.shape
Out[984]: (4, 2, 3)