数组是非常常用的一类数据
目录
- 1. 使用 array() 函数创建数组
- 1.1 基础用法
- 1.2 array 的定义
- 1.3 dtype 参数
- 1.4 copy 参数
- 1.5 ndmin 参数
- 1.6 subok 参数
- 2. 创建等差数列
- 3. 创建随机数组
- 3.1 rand() 函数
- 3.2 randn()函数
- 3.3 randint()函数
- 4. NumPy 数组属性
- 4.1 ndarray.shape
- 4.2 ndarray.ndim
- 4.3 ndarray.flags
- 5. NumPy 中的常数
1. 使用 array() 函数创建数组
1.1 基础用法
代码
import numpy as np
a = np.array([1,2,3,4])
b = np.array(['国家','省份','城市','地区'])
c = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(b)
print(c)
结果
[1 2 3 4]
['国家' '省份' '城市' '地区']
[[1 2 3]
[4 5 6]
[7 8 9]]
1.2 array 的定义
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
参数 | 描述 |
object | 任何暴露数组接口方法的对象 |
dtype | 数据类型 |
copy | 如果为 True,则 object 对象被复制,否则,只有当__array__返回副本,object 是嵌套序列,或者需要副本来满足任何其他要求(dtype,order等)时,才会生成副本。 |
order | 指定阵列的内存布局。 如果 object 不是数组,则新创建的数组将按行排列(C),如果指定了(F),则按列排列。 如果 object 是一个数组,则以下成立。C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序) |
subok | 默认情况下,返回的数组被强制为基类数组。 如果为 True,则返回子类。 |
ndmin | 返回数组的最小维数 |
1.3 dtype 参数
d = np.array(a, dtype=np.float_)
# 这样写也可以: d = np.array(a, dtype=float)
print(d)
输出
[1. 2. 3. 4.]
1.4 copy 参数
import numpy as np
a = np.array([1, 2, 3])
b = np.array(a, copy=True)
a[0] = 0
print(a)
print(b)
输出
[0 2 3]
[1 2 3]
1.5 ndmin 参数
import numpy as np
a = [1, 2, 3]
b = np.array(a, ndmin=2)
print(b)
输出
[[1 2 3]]
1.6 subok 参数
import numpy as np
a = np.matrix('1 2 7; 3 4 8; 5 6 9')
print(type(a))
print(a)
at = np.array(a, subok=True)
af = np.array(a, subok=False)
print(type(at))
print(type(af))
输出
<class 'numpy.matrix'>
[[1 2 7]
[3 4 8]
[5 6 9]]
<class 'numpy.matrix'>
<class 'numpy.ndarray'>
2. 创建等差数列
>>> import numpy as np
>>> a = np.arange(1,21,4)
>>> print(a)
[ 1 5 9 13 17]
3. 创建随机数组
3.1 rand() 函数
用rand()函数创建的数组中的每个元素都是[0,1)区间内的随机数。演示代码如下:
>>> np.random.rand(2)
array([0.33580773, 0.07590507])
>>> np.random.rand(2,3)
array([[0.09812462, 0.97707267, 0.85845688],
[0.33423209, 0.74302552, 0.37617341]])
>>> np.random.rand(2,3,4)
array([[[0.97723137, 0.9808032 , 0.6534103 , 0.18154054],
[0.42427362, 0.62468808, 0.38630772, 0.53190931],
[0.13578354, 0.8978882 , 0.28914294, 0.14055245]],
[[0.19575411, 0.18305507, 0.39326138, 0.57984187],
[0.56623556, 0.47416374, 0.9271525 , 0.56394451],
[0.09426942, 0.70510762, 0.50222655, 0.34875468]]])
3.2 randn()函数
用randn()函数创建的数组中的元素是符合标准正态分布(均值为0,标准差为1)的随机数。
import numpy as np
import matplotlib.pyplot as plt
b = np.random.randn(5)
a = np.arange(-2,3)
print(a)
print(b)
plt.scatter(a, b)
plt.show()
输出
[-2 -1 0 1 2]
[ 1.68605811 0.45481162 -0.59707887 -0.45222767 0.80606129]
3.3 randint()函数
用randint()函数创建的数组中的元素是指定范围内的随机整数。
>>> np.random.randint(2,6,10)
array([3, 5, 3, 3, 2, 5, 4, 2, 4, 2])
使用randint()函数也可以创建二维的随机整数数组
>>> np.random.randint(2,6,(4,3))
array([[2, 2, 3],
[2, 5, 4],
[4, 2, 5],
[3, 2, 2]])
4. NumPy 数组属性
NumPy 数组的维度(又称维数)称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。
NumPy 中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。
| 属性 | 说明 |
| ---- | ---- | ---- |
| ndarray.ndim | 秩,即轴的数量或维度的数量 |
| ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
| ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
| ndarray.dtype | ndarray 对象的元素类型 |
| ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
| ndarray.flags | ndarray 对象的内存信息 |
| ndarray.real | ndarray 元素的实部(复数的实部) |
| ndarray.imag | ndarray 元素的虚部(复数的虚部) |
| ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性 |
4.1 ndarray.shape
返回一个包含数组维度的元组,对于矩阵,n 行 m 列,它也可以用于调整数组维度。
>>> a = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(a.shape)
(2, 3)
>>> a.shape = (3, 2)
>>> print(a)
[[1 2]
[3 4]
[5 6]]
NumPy 也提供了reshape() 函数来调整数组维度。只是 reshape() 返回调整维度后的副本,而不改变原 ndarray。
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
print(b) # a 没变
4.2 ndarray.ndim
>>> a = np.arange(24)
>>> print(a)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
>>> print(a.ndim)
1
>>> b = a.reshape(2,4,3)
>>> print(b)
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]]
>>> print(b.ndim)
3
4.3 ndarray.flags
>>> print(b.flags)
C_CONTIGUOUS : True # 数据是在一个单一的C风格的连续段中
F_CONTIGUOUS : False # 数据是在一个单一的Fortran风格的连续段中
OWNDATA : False # 数组拥有它所使用的内存或从另一个对象中借用它
WRITEABLE : True # 数据区域可以被写入,将该值设置为 False,则数据为只读
ALIGNED : True # 数据和所有元素都适当地对齐到硬件上
WRITEBACKIFCOPY : False # UPDATEIFCOPY 已弃用,由 WRITEBACKIFCOPY 取代;
UPDATEIFCOPY : False # 这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新
5. NumPy 中的常数
正无穷:Inf = inf = infty = Infinity = PINF
负无穷:NINF
正零:PZERO
负零:NZERO
非数值:nan = NaN = NAN
自然数e:e
π:pi
伽马:euler_gamma
None 的别名:newaxis
print(np.inf)
print(np.NINF)
print(np.PZERO)
print(np.NZERO)
print(np.nan)
print(np.e)
print(np.pi)
print(np.euler_gamma)
print(np.newaxis)
输出
inf
-inf
0.0
-0.0
nan
2.718281828459045
3.141592653589793
0.5772156649015329
None