【问题标题】:Adding a third dimension to my 2D array in a for loop在 for 循环中向我的二维数组添加第三维
【发布时间】:2021-07-15 11:47:30
【问题描述】:

我有一个 for 循环,它为循环中的每个条目提供 16 x 8 2D 数组的输出。我想将所有这些 2D 数组沿 z 轴堆叠在 3D 数组中。这样,我可以确定 z 轴上的方差。我尝试了多个命令,例如循环内外的 np.dstack、matrix3D[p,:,:] = ... 和 np.newaxis。然而,我最接近我想要的输出只是重复堆叠在一起的最后一个数组。尺寸也很差。我需要保留原来的 16 x 8 格式。到目前为止,我有点太深了,可以在正确的方向使用一些轻推!

我的代码:

excludedElectrodes = [1,a.numberOfColumnsInArray,a.numberOfElectrodes-a.numberOfColumnsInArray+1,a.numberOfElectrodes]
matrixEA = np.full([a.numberOfRowsInArray, a.numberOfColumnsInArray], np.nan)
for iElectrode in range(a.numberOfElectrodes):
    if a.numberOfDeflectionsPerElectrode[iElectrode] != 0:
        matrixEA[iElectrode // a.numberOfColumnsInArray][iElectrode % a.numberOfColumnsInArray] = 0

for iElectrode in range (a.numberOfElectrodes):
    if iElectrode+1 not in excludedElectrodes:
        
        """Preprocessing"""
        
        # Loop over heartbeats
        for p in range (1,len(iLAT)):
            # Calculate parameters, store them in right row-col combo (electrode number)
                    matrixEA[iElectrode // a.numberOfColumnsInArray][iElectrode % a.numberOfColumnsInArray] =  (np.trapz(abs(correctedElectrogram[limitA[0]:limitB[0]]-totalBaseline[limitA[0]:limitB[0]]))/(1000))

                    # Stack all matrixEA arrays along z axis
                    matrix3D = np.dstack(matrixEA)

【问题讨论】:

  • 对于循环的每次迭代,二维数组是否具有相同的形状?此外,使用 [i,j] 进行索引,而不是 [i][j] ,因为这会将数组切片两次。
  • 是的,它们具有相同的 16 x 8 形状,它必须是这种形状,因为它与我用来获取测量值的阵列上的电极位置相对应。感谢您的反馈,我已经对其进行了更改,并且确实效果更好。

标签: numpy multidimensional-array


【解决方案1】:

这个例子 sn-p 做你想做的事,虽然我怀疑你的错误更多地与concatenate 部分无关的事情。在这里,我们在数组中使用None 关键字来创建一个新的空维度(沿此我们连接二维数组)。

import numpy as np

# Function does create a dummy (16,8) array
def foo(a):
    return np.random.random((16,8)) + a

arrays2D = []
# Your loop
for i in range(10):
    # Calculate your (16,8) array
    f = foo(i)
    # And append it to the list
    arrays2D.append(f)

# Stack arrays along new dimension
array3D = np.concatenate([i[...,None] for i in arrays2D], axis = -1)

【讨论】:

  • 您好 Lith,非常感谢您的建议!该代码正在运行,但从方差结果来看,我怀疑确实存在来自我必须首先解决的代码其他部分的错误。非常感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 2016-06-28
  • 2021-08-10
  • 1970-01-01
  • 2023-01-11
  • 2019-09-02
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多