在numpy中重塑ndarray与常规数组?

2024-10-19 16:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类型为'努比·恩达雷,称为“myarray”,当使用python的“print”打印到屏幕上时,看起来像是点击

[[[ 84   0 213 232] [153   0 304 363]]
 [[ 33   0  56 104] [ 83   0  77 238]]
 [[ 0  0  9 61] [ 0  0  2 74]]]

“myarray”是由另一个库生成的。myarray.shape的值等于(3,2)。我希望这是一个三维数组,有三个索引。当我尝试自己制作这个结构时,使用:

^{pr2}$

我得到了second_array.shape等于(3, 2, 4),正如预期的那样。为什么会有这种区别?另外,鉴于此,我如何重塑“myarray”以便合并两列,即,结果是:

[[[ 84   0 213 232 153   0 304 363]]
 [[ 33   0  56 104  83   0  77 238]]
 [[ 0  0  9 61  0  0  2 74]]]

编辑:为了澄清,我知道在second_array的情况下,我可以做second_array.reshape((3,8))。但是对于格式为myarray但没有3d索引的ndarray,这是如何工作的呢?在

myarray.dtype是“object”,但也可以改为ndarray。在

编辑2:越来越近了,但是仍然不能完全得到ravel/flatten后面的形状。我有:

a = array([[1, 2, 3],
       [4, 5, 6]])
b = array([[ 7,  8,  9],
       [10, 11, 12]])
arr = array([a, b])

我试着:

arr.ravel().reshape((2,6))

但这给了[[1, 2, 3, 4, 5, 6], ...],我想要{}。如何做到这一点?在

谢谢。在


Tags: 编辑类型屏幕数组结构arrayprintndarray
1条回答
网友
1楼 · 发布于 2024-10-19 16:47:21

实际上,ravel和{}可以是重塑数组的有用工具:

import numpy as np

myarray = np.empty((3,2),dtype = object)
myarray[:] = [[np.array([ 84,   0, 213, 232]), np.array([153, 0, 304, 363])],
 [np.array([ 33,   0,  56, 104]), np.array([ 83,   0,  77, 238])],
 [np.array([ 0, 0,  9, 61]), np.array([ 0,  0,  2, 74])]]

myarray = np.hstack(myarray.ravel()).reshape(3,2,4)
print(myarray)
# [[[ 84   0 213 232]
#   [153   0 304 363]]

#  [[ 33   0  56 104]
#   [ 83   0  77 238]]

#  [[  0   0   9  61]
#   [  0   0   2  74]]]

myarray = myarray.ravel().reshape(3,8)
print(myarray)
# [[ 84   0 213 232 153   0 304 363]
#  [ 33   0  56 104  83   0  77 238]
#  [  0   0   9  61   0   0   2  74]]

关于编辑2:

^{pr2}$

注意到

In [45]: arr[:,0,:]
Out[45]: 
array([[1, 2, 3],
       [7, 8, 9]])

由于您希望第一行是[1,2,3,7,8,9],因此上面显示您希望第二个轴成为第一个轴。这可以通过swapaxes方法实现:

print(arr.swapaxes(0,1).reshape(2,6))
# [[ 1  2  3  7  8  9]
#  [ 4  5  6 10 11 12]]

或者,给定ab,或者等价地,arr[0]和{},可以直接用hstack方法形成{}:

arr = np.hstack([a, b])
# [[ 1  2  3  7  8  9]
#  [ 4  5  6 10 11 12]]

相关问题 更多 >