python - python 中的动态 numpy 数组

标签 python arrays matlab numpy

我正在尝试创建一个形状为 (a, b, 1, d) 的 numpy 数组(比如说 A),其中 d 未知并根据我的输入而变化。我有另一个形状为 (a, b, 1, 1) 的数组(假设为 B)。我想将 for 循环中的 B 值附加到 A 中。在 matlab 中可以轻松完成:

a = zeros(a, b, 1, 1)
count = 0
for i = 1 : something
    ai = array of shape (a, b, 1, 1)
    count += 1
    a(:, :, 1, count) = ai
end

如何在 python 中获得类似的结果?

最佳答案

MATLAB 可以简单地通过索引新值来增长矩阵; numpy 不允许这样做。但是您可以连接 AB 创建形状为 (a,b,1,d+1)

的新数组
In [1187]: np.concatenate((np.ones((2,3,1,4)), np.ones((2,3,1,1))), axis=-1).shape

Out[1187]: (2, 3, 1, 5)

但是如果您想多次执行此操作,我建议将中间数组收集在一个列表中,并在最后进行一次串联。这样效率更高。

In [1189]: a = [np.zeros((2,3,1,1))]
In [1190]: for i in range(4):
      ...:     a.append(np.ones((2,3,1,1))*i)
      ...: a = np.concatenate(a, axis=-1)
      ...: 
In [1191]: a.shape
Out[1191]: (2, 3, 1, 5)

In [1192]: a
Out[1192]: 
array([[[[ 0.,  0.,  1.,  2.,  3.]],
        ....
        [[ 0.,  0.,  1.,  2.,  3.]]]])

关于python - python 中的动态 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45852502/

相关文章:

python - 在 try block 中返回 try/else

PHP:函数将大量数组作为参数传递

python - 给定一个 n 点列表,我如何使用 numpy 生成一个矩阵,其中包含从每个点到每个其他点的距离?

matlab - 将元胞数组中的值分配给数值数组

matlab - 使用并行池时如何处理 Matlab 许可证错误

python - 日志文件解析python

python - 使用递归 Python 创建嵌套字典

python - 我如何在 opencv 3 中运行 CV_DIST_L2?

javascript - 如何在不使用过滤方法的情况下根据两个数组的出现次数来比较它们?

java - 尝试将文件写入数组 - 出现 NoSuchElementException