Python 将三维阵列沿各自的列分离为二维阵列
代码是用Python编写的。在上面的代码中,我试图将numpy 3-d数组(tempObj)分成两个2-d数组(temp1和temp2),以便合并相应的列。Python 将三维阵列沿各自的列分离为二维阵列,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,代码是用Python编写的。在上面的代码中,我试图将numpy 3-d数组(tempObj)分成两个2-d数组(temp1和temp2),以便合并相应的列。 有更好或更简单的方法吗?使用tempObj[:,0,:]和tempObj[:,1,:]。以下是一个例子: temp1 = tempObj[0][0] temp2 = tempObj[0][1] if len(tempObj) > 1: for i in range(1, len(tempObj)): temp1 = n
有更好或更简单的方法吗?使用
tempObj[:,0,:]
和tempObj[:,1,:]
。以下是一个例子:
temp1 = tempObj[0][0]
temp2 = tempObj[0][1]
if len(tempObj) > 1:
for i in range(1, len(tempObj)):
temp1 = np.vstack((temp1, tempObj[i][0]))
temp2 = np.vstack((temp2, tempObj[i][1]))
您需要确保tempObj
(或其任何部分)的类型是numpy.ndarray
,而不是list
。您可以通过键入print(type(tempObj))
来完成此操作。下面的示例是我怀疑的代码,它给出了一个TypeError错误:列表索引必须是整数,而不是tuple
:
import numpy as np
tempObj = np.array([
[
[1,5], [2,7], [3,8], [4,4],
[6, 5], [4, 7], [13, 8], [9, 4]
],
[
[21,25], [22,72], [32,82], [34,43],
[64, 54], [44, 74], [1443, 48], [94, 44]
],
[
[211, 215], [212, 712], [312, 812], [314, 413],
[614, 514], [414, 714], [11443, 148], [194, 414]
]
])
# Your code:
############################################
temp1 = tempObj[0][0]
temp2 = tempObj[0][1]
if len(tempObj) > 1:
for i in range(1, len(tempObj)):
temp1 = np.vstack((temp1, tempObj[i][0]))
temp2 = np.vstack((temp2, tempObj[i][1]))
print(temp1)
print(temp2)
# my suggestion
############################################
print(tempObj[:, 0, :])
print(tempObj[:, 1, :])
使用
tempObj[:,0,:]
和tempObj[:,1,:]
。以下是一个例子:
temp1 = tempObj[0][0]
temp2 = tempObj[0][1]
if len(tempObj) > 1:
for i in range(1, len(tempObj)):
temp1 = np.vstack((temp1, tempObj[i][0]))
temp2 = np.vstack((temp2, tempObj[i][1]))
您需要确保tempObj
(或其任何部分)的类型是numpy.ndarray
,而不是list
。您可以通过键入print(type(tempObj))
来完成此操作。下面的示例是我怀疑的代码,它给出了一个TypeError错误:列表索引必须是整数,而不是tuple
:
import numpy as np
tempObj = np.array([
[
[1,5], [2,7], [3,8], [4,4],
[6, 5], [4, 7], [13, 8], [9, 4]
],
[
[21,25], [22,72], [32,82], [34,43],
[64, 54], [44, 74], [1443, 48], [94, 44]
],
[
[211, 215], [212, 712], [312, 812], [314, 413],
[614, 514], [414, 714], [11443, 148], [194, 414]
]
])
# Your code:
############################################
temp1 = tempObj[0][0]
temp2 = tempObj[0][1]
if len(tempObj) > 1:
for i in range(1, len(tempObj)):
temp1 = np.vstack((temp1, tempObj[i][0]))
temp2 = np.vstack((temp2, tempObj[i][1]))
print(temp1)
print(temp2)
# my suggestion
############################################
print(tempObj[:, 0, :])
print(tempObj[:, 1, :])
tempObj[:,0]
和tempObj[:,1]
?@Divakar:它不适用于三维数组。tempObj[:,0]
和tempObj[:,1]
?@Divakar:它不适用于三维数组。出现以下错误:TypeError:列表索引必须是整数,非元组
,因此您可以通过键入tempObj=np.array(tempObj)
将其更改为numpy.ndarray
,然后使用tempObj[:,0,:]
等。出现以下错误:tempObj=np.array(tempObj)
值错误:无法将输入数组从形状(4)广播到形状(1)我甚至尝试过这个方法,但是同样的错误出现了:temp1=np.array(tempObj)[:,0,:]
值错误:无法将输入数组从形状(4)广播到形状(1)tempObj=[[array([[0.10637,-0.1495,-0.0374,-0.2185],[0.1551,-0.0893,0.036,0.0282],[0.2061,0.5072,0.3971,0.3163],[-0.1448,0.2442,0.0603,0.0389],[1.0165,1.0355,0.0088,0.0101],[0.98874854,0.97787452,0.99859974,0.95337157],[0.97623035,0.99196171,0.99863394,0.99919989],[0.95837367,0.77314455,0.85411506,0.90477692],[0.97922599,0.9420922,99846],[0.998],[0.35578364,0.34216564,0.99992133,0.99989703]]]
好的,现在我明白了。使用tempObj=np.array(tempObj[0])
然后tempObj[0,:,:]
和tempObj[1,:,:]
出现以下错误:TypeError:列表索引必须是整数,而不是元组
因此您可以通过键入tempObj=np.array(tempObj)
然后使用tempObj[:,0,:]
等将其更改为numpy.ndarray
,方法是:tempObj=np.array(tempObj)
ValueError:无法将输入数组从形状(4)广播到形状(1)
我甚至尝试过这个,但同样的错误出现了:temp1=np.array(tempObj)[:,0,:]
ValueError:无法将输入数组从形状(4)广播到形状(1)
tempObj=[[array([[0.10637,-0.1495,-0.0374,-0.2185],[0.1551,-0.0893,0.036,0.0282],[0.2061,0.5072,0.3971,0.3163],-0.1448,0.2442,0.0603,0.0389],-1.0165,1.0355,0.0088,0.0101]),阵列([0.98874854,0.97787452,0.99859974,0.95337157],[0.97623035,0.99196171,0.99863394,0.99989],],[0.95837367,0.77314455,0.85411506,0.90477692],[0.97922599,0.9420922,0.99636324,0.99848106],[0.35578364,0.34216564,0.99992133,0.99989703])]。
好的,现在我明白了。使用tempObj=np.array(tempObj[0
然后tempObj[0,:,:,:],