numpy .reshape函数改变数组元素类型

1 投票
1 回答
1663 浏览
提问于 2025-04-18 00:20

你如何在不改变数组元素类型的情况下,使用numpy的.reshape函数呢?我想说的是:

letters = ['A', 'B', 'C']
letters_array = np.array(letters)
print letters_array
#['A' 'B' 'C']
print type(letters_array[0])
#<type 'numpy.string_'>

现在,我使用.reshape

letters_array = letters_array.reshape(3, 1)
print letters_array
#[['A']
#['B']
#['C']]
print type(letters_array[0])
#<type 'numpy.ndarray'>

为什么在使用.reshape之后,元素类型会从字符串变成数组?怎样才能保持数据类型不变呢?

1 个回答

4

首先,letters_array 只有一个维度,所以当你用 letters_array[0] 来访问它时,你得到的是一个单独的元素。

letters = ['A', 'B', 'C']
letters_array = np.array(letters)
print letters_array.ndim
# 1

在使用 reshape 之后,这个数组变成了两个维度,这意味着用同样的方式访问时,你得到的是数组的一行(这个行的类型是 numpy.ndarray)。要获取单个元素,你需要为每个维度提供一个索引:

letters_array = letters_array.reshape(3, 1)
print letters_array.ndim
# 2
print type(letters_array[0, 0])
# <type 'numpy.string_'>

注意,这两种情况下得到的元素类型是一样的!与其使用 type,不如查看数组的 dtype 属性,这个属性与数组的形状无关:

print letters_array.dtype
# |S1

撰写回答