我有一个'numpy.ndarray'类型的对象,名为“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)。我希望这是一个三维数组,有三个索引。当我尝试自己制作这个结构时,使用:
second_array = array([[[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.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], ...]
,我想要[[1, 2, 3, 7, 8, 9], ...]
。怎么办呢?
感谢。
答案 0 :(得分:3)
事实上,ravel
和hstack
可以成为重塑数组的有用工具:
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:
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
b = np.array([[ 7, 8, 9],
[10, 11, 12]])
arr = np.array([a, b])
print(arr)
# [[[ 1 2 3]
# [ 4 5 6]]
# [[ 7 8 9]
# [10 11 12]]]
请注意
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]]
或者,给定a
和b
,或等效地arr[0]
和arr[1]
,您可以直接使用arr
方法形成hstack
:
arr = np.hstack([a, b])
# [[ 1 2 3 7 8 9]
# [ 4 5 6 10 11 12]]