目录
一、介绍
ndarray 是numpy的核心,ndarray是一个多维数组的数据结构,而且这个多维数组的结构可以根据需要改变形状,形状指的是多维数组的列和行。同一个ndarray里的数据类型相同。
二、创建ndarray
#导入numpy
import numpy as np
#使用np.array创建ndarray
arr = np.array([1, 2, 3, 4, 5])
print('arr={}'.format(arr))
#打印arr的类型
print('arr的type为:{}'.format(type(arr)))
#获取arr的形状
print('arr的形状为:{}'.format(arr.shape))
#获取arr里面存的数据的类型
print('arr里存的数据类型为:{}'.format(arr.dtype))
运行结果:
arr=[1 2 3 4 5]
arr的type为:<class 'numpy.ndarray'>
arr的形状为:(5,)
arr里存的数据类型为:int64
arr.shape 返回 ndarray的形状,(5,)表示arr为1维数组,有5行。一般我们将1维数组称为秩(读:zhi)为1的数组。N维数组的秩为N。
arr.dtype 返回arr存储的数据类型。参考:https://docs.scipy.org/doc/numpy-1.13.0/user/basics.types.html
创建秩为2的数组,即2维数组
#导入numpy
import numpy as np
#使用np.array创建ndarray
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12],[13, 14, 15]])
print(arr)
print('arr.shape={}'.format(arr.shape))
运行结果:可以看到arr.shape 返回(5, 3) 表示arr为2为数组。表示 5行3列的二维数组。
arr=[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
arr.shape=(5, 3)
下面创建一个秩为3的,即三维数组:
import numpy as np
arr = np.array([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]], [[13, 14], [15, 16], [17, 18]],[[19, 20],[21, 22],[23, 24]]])
print('arr={}'.format(arr))
print('arr.shape={}'.format(arr.shape))
运行结果:第一维度为4,第二个维度为3,第三个维度为2
arr=[[[ 1 2]
[ 3 4]
[ 5 6]]
[[ 7 8]
[ 9 10]
[11 12]]
[[13 14]
[15 16]
[17 18]]
[[19 20]
[21 22]
[23 24]]]
arr.shape=(4, 3, 2)
三、ndarray 的类型 dtype
ndarray 无法存储不同的数据类型,如果将int 和 string 存到一个ndarray, numpy会将int转换为string。如下:
#导入numpy
import numpy as np
#使用np.array创建ndarray
arr = np.array([1, 'hello'])
print('arr={}'.format(arr))
#获取arr里面存的数据的类型
print('arr里存的数据类型为:{}'.format(arr.dtype))
运行结果(U21 表示长度为21的unicode):
arr=['1' 'hello']
arr里存的数据类型为:<U21
numpy会自动选择存储的类型即dtype。如果将不同类型的元素存到同一个ndarray中,numpy会向上转型为同一个类型。如同时有int 和 string 的时会统一转换为string,同时有int 和 float 时会统一转换为float。
虽然 NumPy 自动为 ndarray 选择 dtype,但是 NumPy 也允许你指定要为 ndarray 的元素分配的特定 dtype。在 np.array() 函数中创建 ndarray 时,可以使用关键字 dtype 指定 dtype。我们来看一个示例:
import numpy as np
arr = np.array([1.5, 2.2, 3.7, 4.0, 5.9], dtype = np.int64)
print('arr = {}'.format(arr))
print('arr.type={}'.format(arr.dtype))
运行结果:虽然存入的元素为float类型,但是因为我们指定了arr的type为int,所以会将float转换为int存储。
arr = [1 2 3 4 5]
arr.type=int64
四、ndarray 写入文件
创建 ndarray 后,我们可以将其保存到文件中,以便以后读取该文件或供另一个程序使用。NumPy 提供了一种将数组保存到文件中以供日后使用的方式。
import numpy as np
arr = np.array([1.5, 2.2, 3.7, 4.0, 5.9], dtype = np.int64)
#使用save将arr保存到my_array的文件。numpy会自动追加拓展名为:.npy。
#可以指定路径如:/opt/my_array。会将文件保存到opt目录下
np.save('my_array', arr)
#使用load方法读取
arr_from_file = np.load('my_array.npy')
print('arr_from_file={}'.format(arr_from_file))
运行结果:
arr_from_file=[1 2 3 4 5]