我想从每个数组中用不同的数字创建一个新数组。这是一个例子:
import numpy as np
a=[[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
b=[[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
c=[[0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10],[0,1,2,3,4,5,6,7,8,9,10]]
d=[]
for c in range (0,2):
d.append([])
for s in range (0,10):
d[c] =np.concatenate((a[c][s],b[c][s],c[c][s]))
print(d)
当我打印'd'时,它给了我一个TypeError:'int'对象不是可订阅的。
这是由于连接功能吗?或者我可以使用堆栈吗?
我希望结果如下:
d[0][0]= [0,0,0]
从每个阵列获得第一个术语。 d [0] [0]索引到文件和行。这就是我想要这种格式的原因。
答案 0 :(得分:0)
Numpy是一个非常强大的库,因此我建议您在使用for
循环之前始终先使用它来操作数组。你应该查看numpy axes
和shapes
的含义。
您想要的数组d
似乎是3D
,但数组a
,b
和c
是2D
。因此,我们将首先扩展三个数组的维数。然后我们可以轻松地在这个新维度上连接它们。
以下代码可实现您的目标:
import numpy as np
# First convert the lists themselves to numpy arrays.
a = np.array([[0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]) # Shape: (2, 11)
b = np.array([[0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]) # Shape: (2, 11)
c = np.array([[0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]) # Shape: (2, 11)
# Print the shape of the arrays
print(a.shape, b.shape, c.shape)
# Add an additional dimension to the three arrays along a new axis.
# axis 0 and axis 1 already exist. So we create it along axis 2.
a_ = np.expand_dims(a, axis=2) # Shape: (2, 11, 1)
b_ = np.expand_dims(b, axis=2) # Shape: (2, 11, 1)
c_ = np.expand_dims(c, axis=2) # Shape: (2, 11, 1)
# Print the shape of the arrays
print(a_.shape, b_.shape, c_.shape)
# Concatenate all three arrays along the last axis i.e. axis 2.
d = np.concatenate((a_, b_, c_), axis=2) # Shape: (2, 11, 3)
# Print d[0][0] to check if it is [0, 0, 0]
print(d[0][0])
您应该打印单个数组a
,a_
和d
,以检查正在进行的转换类型。