python - 在循环中的 Python 中 append 矩阵

标签 python arrays loops numpy append

我有一个大小为 (3,3) 的矩阵 y。假设它是一个 3 x 3 矩阵,所有元素 = 1。

然后我有一个循环来创建多个 (3,3) 矩阵。 所以这些是输出:

第一个循环我得到这个矩阵:

 [[  88.    42.5    9. ]
 [ 121.5   76.    42.5]
 [ 167.   121.5   88. ]]

我得到的第二个循环:

 [[  88.    42.5   13. ]
 [ 117.5   72.    42.5]
 [ 163.   117.5   88. ]]

所以我想实现的基本上是

 [[1, 1, 1] [88, 42.5, 9] [88, 42.5, 13],
 [1, 1, 1] [121.5, 76, 42.5] [117.5, 72, 42.5],
 [1, 1, 1] [167, 121.5, 88] [163, 117.5, 88]]

这是假设循环迭代两次,我不确定我是否将逗号或间距等放在正确的位置,但理想情况下我获得一个 3 x 3 矩阵,每个元素都有一个包含 3 个元素的列表。

到目前为止,我的循环代码是(Up_xyz、Mid_xyz、Down_xyz 输出 [x,x,x] 格式):

for i in range (1,len(PeopleName)):       
  x = np.vstack((Up_xyz(TempName[i]),Mid_xyz(TempName[i]),Down_xyz(TempName[i])))
restA.append(x)
l+=1

结果是:

   [array([[  88. ,   42.5,   13. ],
   [ 117.5,   72. ,   42.5],
   [ 163. ,  117.5,   88. ]])]

这只是循环最后一次迭代的值。

此外,当我将 y append 到 restA 时

print(y.append(restA))

我收到这个错误:

'numpy.ndarray' object has no attribute 'append'

我认为这是由于尺码不同造成的。但我将不胜感激任何帮助,而且我对 Python 还很陌生,所以我愿意接受任何其他更有效的方法。谢谢

最佳答案

它存在np.append,但是在一个循环中它的开销非常大(如果你一个一个地追加)。参见 documentation :

A copy of arr with values appended to axis. Note that append does not occur in-place: a new array is allocated and filled. If axis is None, out is a flattened array.

为循环的每个增量完成数组的复制(这里它只有 3 个增量,但我认为这样做不是一个好的做法,请注意)

好的,你有 3 个数组,你想合并每一个:

import numpy as np

a = np.array([[ 1.,  1.,  1.],
              [ 1.,  1.,  1.],
              [ 1.,  1.,  1.]])

b = np.array([[  88.,    42.5,    9. ],
              [ 121.5,   76.,    42.5],
              [ 167.,  121.5,   88. ]])

c = np.array([[  88.,    42.5,   13. ],
              [ 117.5,   72.,    42.5],
              [ 163.,   117.5,  88. ]])

result = np.empty((3,3), dtype=object)

n, p = result.shape
for i in range(n):
      result[i, 0] = a[i,:]
      result[i, 1] = b[i,:]
      result[i, 2] = c[i,:]

print(result)

输出:

array([[array([ 1.,  1.,  1.]), array([ 88. ,  42.5,   9. ]), 
       array([ 88. ,  42.5,  13. ])],
       [array([ 1.,  1.,  1.]), array([ 121.5,   76. ,   42.5]),
        array([ 117.5,   72. ,   42.5])],
       [array([ 1.,  1.,  1.]), array([ 167. ,  121.5,   88. ]),
        array([ 163. ,  117.5,   88. ])]], dtype=object)

如果你想要 list 而不是 np.array 做:

n, p = result.shape
for i in range(n):
    result[i, 0] = a[i,:].tolist()
    result[i, 1] = b[i,:].tolist()
    result[i, 2] = c[i,:].tolist()

print(result)

输出:

[[[1.0, 1.0, 1.0] [88.0, 42.5, 9.0] [88.0, 42.5, 13.0]]
 [[1.0, 1.0, 1.0] [121.5, 76.0, 42.5] [117.5, 72.0, 42.5]]
 [[1.0, 1.0, 1.0] [167.0, 121.5, 88.0] [163.0, 117.5, 88.0]]]

每个元素都是一维数组的二维数组有点奇怪。

您可以直接使用 3D 数组 (3,3,3) 形状:

np.stack([a,b,c])

关于python - 在循环中的 Python 中 append 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894012/

相关文章:

c++ - 如何使用 <array> header 声明二维数组?

java - 存储在数组中的数组被覆盖为最后添加的数组的内容

java - 如何对 "reverse"进行选择排序?

php 数组 foreach 循环

python - 使用 Python ijson 增量读取顶级 JSON 字典

python - 如何让CMake在生成visual studio解决方案后执行一些脚本

python - 属性错误: 'PdfPage' object has no attribute 'render_topil'

c - 查找给定数组中是否重复任何元素的最佳方法?

用于变量名称的 R 循环以运行线性回归模型

python - 重置 pandas 中多级列的索引,以便较高的索引 perfaces 较低的索引