python - "append"多维 numpy 数组的正确方法?

标签 python numpy

我有一个 4d 数组 x,我想循环遍历第一个轴,修改该 3d 数组,然后将此修改后的数组添加到新的 4d 数组 y >.

我目前正在做类似的事情:

xmod = modify(x[0, :, :, :])
y = xmod.reshape(1, x.shape[1], x.shape[2], x.shape[3])
for i in range(1, x.shape[0]):
    xmod = modify(x[i, :, :, :])
    y = np.vstack((y, xmod))

我猜有更多的清洁工可以做到这一点。怎么办?

最佳答案

如果您必须一次对 x 一个子矩阵执行操作,您可以这样做:

y = np.zeros_like(x)
for i in range(x.shape[0]):
    y[i,...] = modify(x[i,...])

例如

In [595]: x=np.arange(24).reshape(4,3,2)
In [596]: y=np.zeros_like(x)
In [597]: for i in range(x.shape[0]):
   .....:     y[i,...]=x[i,...]*2
   .....:     
In [598]: y
Out[598]: 
array([[[ 0,  2],
        [ 4,  6],
        ...
        [40, 42],
        [44, 46]]])

附加到列表通常比重复“附加”到数组更好:

In [599]: y=[]
In [600]: for row in x:
   .....:     y.append(row*2)
   .....: 
In [601]: y=np.array(y)

对于非常大的情况,您可以查看 vstack (或连接 axis=0)是否更快。但是您必须显式向数组添加起始维度。

In [615]: y=[]
In [616]: for row in x:
    y.append((row*2)[None,:])
   .....:     
In [617]: np.vstack(y)

关于python - "append"多维 numpy 数组的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815716/

相关文章:

Python Pandas 替换特殊字符

python - 在 CFFI 中创建类型为 `REAL (* vertices)[DIM]` 的 cdata

python pandas 散点图错误 : is this a bug with pandas?

python - 为什么 x[ :, 0] = x[0] 不能用于单个行向量?

python - 在 numpy 二维数组的每一行中放置一个的快速方法

python - 使用来自另一个 Python 进程的数据更新小部件,而不阻塞它

python - Pandas 按列值计算百分比

pandas - 如何在 tensorflow/keras 中移动像 pandas.shift 这样的张量? (无需将最后一行移到第一行,如 tf.roll)

sql - PostgreSQL/Pandas 插入包含 null/np.nan/空值的稀疏数组

python - 同时使用内置 setattr 和索引切片