💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# numpy练习1 ## 导入模块 ```python import numpy ``` ## 产生一维数组 ```python arr1=numpy.arange(10)#方式1 print(arr1) arr2=numpy.array([1,2,1,0])#方式2 print(arr2) ``` [0 1 2 3 4 5 6 7 8 9] [1 2 1 0] ## 产生多维数组 ```python arr3=numpy.array([[1,2,3] ,[4,5,6]])#方式1 print(arr3) arr4=numpy.array([numpy.arange(2),numpy.arange(2)])#方式2 print(arr4) arr5=numpy.zeros([3,3])#方式3 print(arr5) arr6=numpy.ones([2,4])#方式4 print(arr6) ``` [[1 2 3] [4 5 6]] [[0 1] [0 1]] [[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]] [[1. 1. 1. 1.] [1. 1. 1. 1.]] ## 查看数据类型 ```python print(arr1.dtype) print(arr5.dtype) ``` int32 float64 ## 设置数据类型 ```python arr7=numpy.array([1,2,1,0],dtype=numpy.int64) print(arr2.dtype) print(arr7.dtype) ``` int32 int64 可以看到,arr2和arr7的内容相同,但是类型不同。可以通过`dtype.itemsize`查看某个类型占用的字节数大小。 ```python print(arr2.dtype.itemsize) print(arr7.dtype.itemsize) ``` 4 8 ## 查看数组的形状(维度) ```python print(arr1.shape) print(arr3.shape) ``` (10,) (2, 3) 对于不含元素的numpy数组,print将只打印出`[]`,但shape保持原来的设定,举例如下: ```python tmp=numpy.ones([1,0,1]) print(tmp) print(tmp.shape) ``` [] (1, 0, 1) ## 设置数组的形状 数组的形状也可以直接设置,这可以容易地使得已有的数组转换成目标维度,但需要保证数组的元素个数不变。 ```python arr8=arr3.copy() print(arr8) arr8.shape=(6,1) print(arr8) ``` [[1 2 3] [4 5 6]] [[1] [2] [3] [4] [5] [6]] __需要注意的是,上面在将arr3的内容拷贝到arr8时,使用了copy方法来实现对象的复制,否则arr8将与arr3共享一个对象。__ ## 选择数组元素 ### 选择单个元素 ```python print(arr1) print(arr1[1]) print() print(arr6) print(arr6[1,1]) ``` [0 1 2 3 4 5 6 7 8 9] 1 [[1. 1. 1. 1.] [1. 1. 1. 1.]] 1.0 ### 选择切片元素:即某个维度上连续的一些元素 ```python print(arr1) print(arr1[1:7]) print() print(arr3) print(arr3[:,1:3]) ``` [0 1 2 3 4 5 6 7 8 9] [1 2 3 4 5 6] [[1 2 3] [4 5 6]] [[2 3] [5 6]] `arr1[1:7]`选择了arr1中下标从1到7(不包含7)的所有元素,并将其组成数组返回。 `arr3[:,1:2]`选择了arr3中第一个维度的所有元素,第二个维度下标1到3(不含3)的元素,并按照原来的数组结构返回。 在选择切片元素时,单独的`:`表示选取这个维度的所有元素;`a:b`表示选取该维度上下标从a到b-1的所有元素;`a:b:c`表示从以步长c选取a到b-1的所有元素。这些与python的数组操作意义均相同。 ```python print(arr3[1:2,1:1]) ``` [] __从以上的例子,我们可以假设numpy是按维度顺序顺次存储所有的元素,并且额外存储了数组的形状,在需要的时候将数组按照合适的视图呈现。__ 需要注意的是,对数组进行选择,结果会返回一个新的对象,但该对象和原来的对象的数据共享同一个内存区域。请看下例,arr9是arr3的一个切片,其数据地址相同而对象地址不同,可以认为切片只是返回了原来数组的一个__视图__。 ```python print(arr3) print() arr9=arr3[:,1:3] print(arr9) print() print(id(arr9.base)==id(arr3)) ``` [[1 2 3] [4 5 6]] [[2 3] [5 6]] True