问题描述
目前我有一个形状为 (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 长。
1楼
您开始的结构不是二维数组,而是包含列表作为其元素的一维数组。 这可能看起来很相似,但实际上却大不相同。
一个典型的(有例外)mxn 数组是一个由 mn 元素和一些“元数据”组成的线性块,允许 numpy 以正确的方式解释您的索引(如 a[i, j])。
相比之下,您的数组是对象引用的一维块(c 语言中的指针),因此如果您想解析单个元素,这会增加另一个间接级别。 首先检索列表,然后检索其元素。
您的数组没有提供适当的 numpy 数组所提供的大部分便利和速度改进,因此最好对其进行转换。
通常, np.array
工厂将长度兼容的嵌套序列转换为尽可能深的数组。
你的情况是个例外,因为从技术上讲,它已经是一个数组,所以np.array
只是浅复制它(它复制列表引用而不是列表本身)包括形状。
绕过此方法的一种方法是在转换之前强制转换为列表:
np.array(list(original_array))
2楼
我的猜测是你有一个包含 33 个列表的列表,其中有 501 个。
您可以将其转换为二维数组(矩阵)或数据帧,这可以通过多种不同的方式完成; 一个简单的方法是:
df = pd.DataFrame([])
counter = 0
for array in X:
df['column_%d' %counter] = array
counter = counter + 1