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

时间:2014-03-28 14:16:13

标签: python numpy

如何在不更改进程中的Array元素类型的情况下在数组上使用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 个答案:

答案 0 :(得分: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