当前位置: 代码迷 >> python >> Python - 更改对象形状?
  详细解决方案

Python - 更改对象形状?

热度:34   发布时间:2023-06-13 14:17:15.0

目前我有一个形状为 (33,) 的元素 X。 我想将其更改为 (33, 501),因为我知道每行确实有 501 个元素。 铁。 X[0] = [0, 1, 0, 0, .. 0, 1]我试过了

np.reshape(X, (33,501))

但它会出现ValueError: total size of new array must be unchanged错误。 即使每行是 501 长。

您开始的结构不是二维数组,而是包含列表作为其元素的一维数组。 这可能看起来很相似,但实际上却大不相同。

一个典型的(有例外)mxn 数组是一个由 mn 元素和一些“元数据”组成的线性块,允许 numpy 以正确的方式解释您的索引(如 a[i, j])。

相比之下,您的数组是对象引用的一维块(c 语言中的指针),因此如果您想解析单个元素,这会增加另一个间接级别。 首先检索列表,然后检索其元素。

您的数组没有提供适当的 numpy 数组所提供的大部分便利和速度改进,因此最好对其进行转换。

通常, np.array工厂将长度兼容的嵌套序列转换为尽可能深的数组。 你的情况是个例外,因为从技术上讲,它已经是一个数组,所以np.array只是浅复制它(它复制列表引用而不是列表本身)包括形状。

绕过此方法的一种方法是在转换之前强制转换为列表:

np.array(list(original_array))

我的猜测是你有一个包含 33 个列表的列表,其中有 501 个。

您可以将其转换为二维数组(矩阵)或数据帧,这可以通过多种不同的方式完成; 一个简单的方法是:

df = pd.DataFrame([])

counter = 0

for array in X:

    df['column_%d' %counter] = array

    counter = counter + 1