numpy .reshape函数改变数组元素类型
你如何在不改变数组元素类型的情况下,使用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