数组是非常常用的一类数据

目录

  • 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]

python 对数组向下取整 python 数组取数_数组

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