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