对于同样的数值计算任务,使用Numpy比直接编写python代码实现的优点:
pip3 install numpy
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.shape)
print(a.dtype)
print(a.ndim)
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
a.shape=(2,3)#将一维数组改成二行三列
print(a*3)#数组运算,所有元素乘3
print(a)
print(a>3)#判断所有元素是否大于3
print(a+a)#两个数组对应位置元素相加,必须保证维度一样
# print(a.shape)
# print(a.dtype)
# print(a.ndim)
(1)在 NumPy 中,ndarray 的底层存储是连续的一段内存空间。该内存空间中保存的是多维数组中的元素。对于一维数组,元素按照顺序存储在连续的内存空间中;对于二维数组,元素也是按照行优先顺序存储的,即第一行的元素存储在内存的前面,第二行的元素紧随其后,以此类推;对于高维数组,元素的存储方式也是按照行优先的方式进行的。
(2)NumPy 中的 ndarray 还包含了元素的数据类型以及数组的形状等信息。因此,在对 ndarray 进行切片、索引等操作时,NumPy 会通过计算偏移量和步长等信息,直接访问对应的内存位置,从而实现高效的数组操作。
(3)由于 ndarray 底层存储是连续的一段内存空间,因此在对数组进行大量计算时,可以利用现代处理器的缓存机制,提高计算效率。此外,ndarray 的内存管理也比较灵活,可以通过设置数组的 strides、dtype 等属性,实现对数组的内存分配和释放等操作。
(1)正常方式创建:
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
(2)通过arang()方法:
array1=np.arange(1,9,2)
print(array1)
array2=np.zeros(10,dtype='int32')
print(array2)
(4)#创建全为一数组
array3=np.ones(shape=(3,2),dtype='float32')
print(array3)
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape) # 输出 (2, 3)
arr.shape = (3, 2)
print(arr) # 输出 [[1 2]
# [3 4]
# [5 6]]
import numpy as np
arr = np.array([1, 2, 3])
print(arr.dtype) # 输出 int64
arr = np.array([1.0, 2.0, 3.0])
print(arr.dtype) # 输出 float64
arr = np.array(['a', 'b', 'c'])
print(arr.dtype) # 输出
注意:想要获得一个与arry数组数据一样但数据类型不一样的数组,不可以直接将arry的数据类型进行改变,容易出错,正确的做法是使用astype()方法,创建一个新数组。
import numpy as np
arr = np.array([1, 2, 3])
arry2=arry.astype('float32')
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 输出 2
arr = np.array([1, 2, 3])
print(arr.ndim) # 输出 1
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.size) # 输出 6
arr = np.array([1, 2, 3])
print(arr.size) # 输出 3
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.itemsize) # 输出 8
arr = np.array([1, 2, 3])
print(arr.itemsize) # 输出 8
(1)可以使用方括号[]和索引值来访问数组中的单个元素,例如:
import numpy as np
# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问第2行第3列的元素
print(a[1, 2]) # 输出:6
(1)使用冒号:分隔符可以创建切片对象,它可以用于访问数组的子集。切片对象包括start:stop:step,其中start是开始索引值,stop是结束索引值,step是步长。
# 创建一个3行3列的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 访问第2行的所有元素
print(a[1, :]) # 输出:[4 5 6]
# 访问第2列的所有元素
print(a[:, 1]) # 输出:[2 5 8]
# 访问第2行到第3行,第1列到第2列的所有元素
print(a[1:3, 0:2]) # 输出:[[4 5] [7 8]]
需要注意的是,使用切片返回的是一个新的ndarray数组,而不是原数组的视图。因此,对切片返回的数组进行修改不会影响原数组的值。