Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使二维numpy阵列成为三维阵列?_Python_Multidimensional Array_Numpy - Fatal编程技术网

Python 如何使二维numpy阵列成为三维阵列?

Python 如何使二维numpy阵列成为三维阵列?,python,multidimensional-array,numpy,Python,Multidimensional Array,Numpy,我有一个具有形状(x,y)的二维阵列,我想将其转换为具有形状(x,y,1)的三维阵列。有没有一种很好的Pythonic方法可以做到这一点?除了其他答案之外,您还可以使用切片: import numpy as np a= np.eye(3) print a.shape b = a.reshape(3,3,1) print b.shape 甚至这个(可以处理任意数量的维度): 希望这个功能能帮助你把二维数组转换成三维数组 Args: x: 2darray, (n_time, n_in)

我有一个具有形状(x,y)的二维阵列,我想将其转换为具有形状(x,y,1)的三维阵列。有没有一种很好的Pythonic方法可以做到这一点?

除了其他答案之外,您还可以使用切片:

import numpy as np

a= np.eye(3)
print a.shape
b = a.reshape(3,3,1)
print b.shape
甚至这个(可以处理任意数量的维度):


希望这个功能能帮助你把二维数组转换成三维数组

Args:
  x: 2darray, (n_time, n_in)
  agg_num: int, number of frames to concatenate. 
  hop: int, number of hop frames. 

Returns:
  3darray, (n_blocks, agg_num, n_in)


def d_2d_to_3d(x, agg_num, hop):

    # Pad to at least one block. 
    len_x, n_in = x.shape
    if (len_x < agg_num): #not in get_matrix_data
        x = np.concatenate((x, np.zeros((agg_num - len_x, n_in))))

    # main 2d to 3d. 
    len_x = len(x)
    i1 = 0
    x3d = []
    while (i1 + agg_num <= len_x):
        x3d.append(x[i1 : i1 + agg_num])
        i1 += hop

    return np.array(x3d)
Args:
x:2darray(n_时间,n_英寸)
agg_num:int,要连接的帧数。
跃点:int,跃点帧数。
返回:
3darray,(n_块,聚集数,n_英寸)
def d_2d_至_3d(x,聚集数,跃点):
#将焊盘焊到至少一个块上。
len_x,n_in=x.形状
如果(len_x如果只想在(x,y,1)中添加第三个轴(x,y),那么(i1+agg_num),Numpy允许您使用
dstack
命令轻松完成此操作

import numpy as np
a = np.eye(3) # your matrix here
b = np.dstack(a).T

您需要将其转置(
.T
)以将其转换为所需的(x,y,1)格式。

您可以通过重塑来完成此操作

例如,如果有一个形状为35 x 750(二维)的阵列,则可以使用A.Reformate(35、25、30)将形状更改为35 x 25 x 30(三维)


更多信息请参阅文档

简单的方法,以及一些数学知识

首先,您知道数组元素的数量,比如说100 然后在以下3个步骤上设置100:

25*2*2=100

或:4*5*5=100

import numpy as np
D = np.arange(100)
# change to 3d by division of 100 for 3 steps 100 = 25 * 2 * 2
D3 = D.reshape(2,2,25) # 25*2*2 = 100
另一种方式:

another_3D = D.reshape(4,5,5)
print(another_3D.ndim)
至4D:

D4 = D.reshape(2,2,5,5)
print(D4.ndim)

谢谢,我使用了A=A.reshope(A.shape+(1,))如果你愿意修改
A
,你可以简单地分配给shape属性:
A.shape=A.shape+(1,)
,甚至
A.shape+=1,
。假设我有一个3D[1000,10,5]数组,并且我想将它转换成带有shape[1000,50]的2D就像连接第二个和第三个初始维度一样。在这种情况下,
order='F'
可以吗?@serafeim,当然可以。谢谢。我注意到理想的结果是在
np.reformate
中使用
order='F'
时。如果未指定
order='F'
,则在我的案例中,在旁注上的输出是错误的,
numpy.newaxis
Is just
None
newaxis
对于可读性来说是“just”。它相当于just do
b=a[…,None]
(省略号还允许它用于N维数组,而不仅仅是2D数组。)没错。出于某种原因,我觉得
newaxis
None
只是一个实现细节(因此可能会在将来进行更改),但它看起来是明确记录的。假设您希望第三个轴不是1?例如,如何使用
b将
a
转换为
b
。形状=(6,8,3)
?@Gathide:那要看情况。你的旧数组中有
6*8=48
个数字。新数组中有
6*8*3=144
个数字。你想如何将原来的48个数字映射到你的新数组中?沿第三个轴重复?在这种情况下,大多数情况下你不需要重复:保持形状
(6,8,1)
并利用NumPy的广播能力。但如果你真的需要shape
(6,8,3)
,请查看
np.tile
np.broadcast\u to
@Gathide,正如马克·迪金森所说,你可以用
np.broadcast\u
b=np.broadcast\u to(a[…,np.newaxis],(6,8,3))
import numpy as np
a = np.eye(3) # your matrix here
b = np.dstack(a).T
import numpy as np
D = np.arange(100)
# change to 3d by division of 100 for 3 steps 100 = 25 * 2 * 2
D3 = D.reshape(2,2,25) # 25*2*2 = 100
another_3D = D.reshape(4,5,5)
print(another_3D.ndim)
D4 = D.reshape(2,2,5,5)
print(D4.ndim)