在下面的代码中,我构造了一个由两个不同的数组组成的数组。此代码示例模拟了原始问题的数据,这就是为什么存在两个不同的数组并以这种方式访问它们的原因。构造数组后,将其转换为numpy并转置后,我只想访问第二个列表。但是,一旦有了第二个列表,它便是由列表对象组成的,尽管它是矩形的(值的格式为(10,5))有人知道为什么会这样吗?在仍然以这种方式访问数据的同时,有什么方法可以避免它?
big_array = []
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array = np.asarray(big_array).transpose()
eval_array = big_array[1]
print(eval_array)
print(eval_array.shape)
以下是照片的输出:
[list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
list([0, 0, 0, 0, 0])]
(10,)
很明显,上面输出中的数组是矩形,但是我想它还没有被识别出来。
答案 0 :(得分:0)
您要声明“显然,数组是矩形的”,但这不是真的:)
看看这个[[0,0],[0,0,0,0,0]]
。这是一个一维数组,其中包含:
这不是矩形。
[[0,0],[0,0],[0,0],[0,0],[0,0]]
(5,2)或[[0,0,0,0,0],[0,0,0,0,0]]
(2,5)是。
为了获得您似乎正在寻找的数组效果,您需要内部数组(属于同一维的一部分)的大小相等。
big_array = []
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
np_arr = np.array(big_array)
np_arr.shape
> (10, 2, 5)
答案 1 :(得分:-1)
初始化不是矩形的数组时,元素是对象。换位表示时,即使内部元素为矩形,NumPy也会保留这些数组的对象类型。之所以看到您所看到的,是因为您转置了一个对象数组,结果得到了一个对象数组。
可以使用以下代码获得正确的形状:
np.asarray(eval_array.tolist())
避免这种情况的方法是从矩形数组开始。