小编pal*_*ago的帖子

Python将3d数组重塑为2d

我想重塑从三维到二维的描绘的numpy数组.不幸的是,订单不正确.

假设有一个numpy数组(1024,64,100),并希望将其转换为(1024*100,64).

有人知道如何维持秩序吗?

图片 - 点击这里

我有一个示例数据

data[0,0,0]=1
data[0,1,0]=2
data[0,2,0]=3
data[0,3,0]=4
data[1,0,0]=5
data[1,1,0]=6
data[1,2,0]=7
data[1,3,0]=8
data[2,0,0]=9
data[2,1,0]=10
data[2,2,0]=11
data[2,3,0]=12
data[0,0,1]=20
data[0,1,1]=21
data[0,2,1]=22
data[0,3,1]=23
data[1,0,1]=24
data[1,1,1]=25
data[1,2,1]=26
data[1,3,1]=27
data[2,0,1]=28
data[2,1,1]=29
data[2,2,1]=30
data[2,3,1]=31
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的结果:

array([[  1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.],
       [  9.,  10.,  11.,  12.],
       [ 20.,  21.,  22.,  23.],
       [ 24.,  25.,  26.,  27.],
       [ 28.,  29.,  30.,  31.]])
Run Code Online (Sandbox Code Playgroud)

此外,我还希望以另一种方式进行重塑,即:

array([[  1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.],
       [  9.,  10.,  11.,  12.],
       [ 20.,  21.,  22.,  23.], …
Run Code Online (Sandbox Code Playgroud)

python numpy reshape

9
推荐指数
1
解决办法
2万
查看次数

numpy vectorization而不是for循环

我在Python中编写了一些代码很好但速度很慢; 我认为由于for循环.我希望可以使用numpy命令加快以下操作.让我来定义目标.

让我们假设我有一个all_CMs维度为rowx 的2D numpy数组col.例如,考虑一个6x 11数组(见下图).

  1. 我想计算的平均对所有行,即总和 ⱼaᵢⱼ导致数组.这当然可以轻松完成.(我叫这个值CM_tilde)

  2. 现在,对于每一行,我想计算一些选定值的平均值,即通过计算它们的总和并将其除以所有列的数量(N)来计算低于某个阈值的所有值.如果该值高于此定义的阈值,则添加CM_tilde值(整行的平均值).调用此值CM

  3. 然后,CM从行中的每个元素中减去该值

除此之外,我想要一个numpy数组或列表,其中CM列出了所有这些值.

图:

数字

以下代码工作但很慢(特别是如果数组变大)

CM_tilde = np.mean(data, axis=1)
N = data.shape[1]
data_cm = np.zeros(( data.shape[0], data.shape[1], data.shape[2] ))
all_CMs = np.zeros(( data.shape[0], data.shape[2]))
for frame in range(data.shape[2]):
    for row in range(data.shape[0]):
        CM=0
        for col in range(data.shape[1]):
            if data[row, col, frame] < (CM_tilde[row, frame]+threshold):
               CM += data[row, col, frame] …
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization

5
推荐指数
1
解决办法
2359
查看次数

标签 统计

numpy ×2

python ×2

reshape ×1

vectorization ×1