我有一个大小为 (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/