np.array的用法
时间: 2024-06-22 20:03:02 浏览: 189
`numpy.array`是NumPy库中的核心数据结构,它是一个强大的多维数组,用于处理数值计算。使用`np.array`,你可以创建和操作一系列相同类型的元素,并且它提供了许多高效的数学运算功能。以下是一些基本的用法:
1. 创建数组:你可以直接传递列表、元组或类似的数据,`np.array()`会根据这些数据自动推断数据类型。
```python
import numpy as np
# 从列表创建数组
arr = np.array([1, 2, 3, 4, 5])
```
2. 数组形状:`array`的形状可以通过`shape`属性获取或改变。
```python
arr.shape # 输出: (5,)
arr.reshape(2, 2) # 改变形状为2x2
```
3. 数据类型:`dtype`属性显示数组的元素类型。
```python
arr.dtype # 输出: int64 或者 dtype('int64')
```
4. 数组操作:NumPy提供大量的数学函数和方法,如加法、乘法、索引、切片等。
```python
arr + 2 # 增加每个元素2
arr * arr # 数组的元素自乘
arr[0:3] # 获取前三个元素
```
5. 初始值和维度:可以指定初始值和维度来创建数组。
```python
arr = np.zeros((3, 3)) # 创建一个3x3全零矩阵
arr = np.ones((2, 2), dtype='float32') # 创建一个2x2全1的浮点型矩阵
```
相关问题
labels = { "relpath": np.array(self.relpaths), "synsets": np.array(self.synsets), "class_label": np.array(self.class_labels), "human_label": np.array(self.human_labels), }解析,为啥要用array
在这段代码中,`labels` 是一个字典,包含了四个键值对。其中,每个键对应的值都是一个 `numpy` 数组,分别是 `relpath`、`synsets`、`class_label` 和 `human_label`。这些数组都是由 `numpy` 库提供的多维数组对象,用于存储和处理大规模数值数据。
使用数组的好处是,它可以更高效地存储和处理数据,同时也提供了许多方便的函数和方法,用于对数据进行运算、重塑、筛选等操作。在这个例子中,使用数组的好处是可以方便地进行批量操作,例如对所有图片进行预处理或者评估。
另外,使用数组还可以方便地将数据传递给深度学习框架中的模型进行训练或预测。深度学习模型通常需要将数据转换成张量形式,而 `numpy` 数组可以很方便地转换成张量,并且支持多种数据类型和维度格式。因此,使用数组可以方便地将数据集和模型进行连接,从而构建起完整的深度学习管道。
综上所述,使用 `numpy` 数组可以提高数据处理效率和代码简洁度,同时也方便了深度学习模型的训练和预测。
解释每行代码:import numpy as np def dense(a_in, W, b, g): units = W.shape[1] a_out = np.zeros(units) for j in range(units): w = W[:,j] z = np.dot(w, a_in) + b[j] a_out[j] = g(z) return a_out def sequential(x): W1 = np.array([[1, 2], [3, 4]]) b1 = np.array([-1, -1]) W2 = np.array([[-3, 4], [5, -6]]) b2 = np.array([1, 1]) W3 = np.array([[7, -8], [-9, 10]]) b3 = np.array([2, 2]) a1 = dense(x, W1, b1, np.tanh) a2 = dense(a1, W2, b2, np.tanh) a3 = dense(a2, W3, b3, np.tanh) f_x = a3 return f_x a_in = np.array([-2, 4]) print(sequential(a_in))
第一行代码:import numpy as np
导入了numpy库并将其重命名为np,以便在代码中使用numpy中的函数和方法。
第二行代码:def dense(a_in, W, b, g):
定义了一个名为dense的函数,该函数接受四个参数:输入向量a_in,权重矩阵W,偏置向量b,激活函数g。
第三行代码:units = W.shape[1]
计算权重矩阵W的列数,即该层的神经元数量,并将其赋值给变量units。
第四行代码:a_out = np.zeros(units)
创建一个长度为units的全0向量,并将其赋值给变量a_out,用于存储该层的输出向量。
第五行代码:for j in range(units):
循环遍历该层的所有神经元,其中j表示当前神经元的索引。
第六行代码:w = W[:,j]
取出权重矩阵W的第j列,即当前神经元的权重向量,并将其赋值给变量w。
第七行代码:z = np.dot(w, a_in) + b[j]
计算该神经元的加权输入,即将权重向量w与输入向量a_in做点积,并加上该神经元的偏置b[j]。
第八行代码:a_out[j] = g(z)
将该神经元的加权输入z通过激活函数g进行非线性变换,并将结果赋值给输出向量a_out的第j个元素。
第九行代码:return a_out
返回该层的输出向量a_out。
第十行代码:def sequential(x):
定义了一个名为sequential的函数,该函数接受一个参数x,表示神经网络的输入向量。
第十一行代码:W1 = np.array([[1, 2], [3, 4]])
定义了第一层的权重矩阵W1,其大小为2x2,表示有两个输入和两个神经元。
第十二行代码:b1 = np.array([-1, -1])
定义了第一层的偏置向量b1,其大小为2,表示有两个神经元,每个神经元都有一个偏置。
第十三行代码:W2 = np.array([[-3, 4], [5, -6]])
定义了第二层的权重矩阵W2,其大小为2x2,表示有两个神经元和两个输入。
第十四行代码:b2 = np.array([1, 1])
定义了第二层的偏置向量b2,其大小为2,表示有两个神经元,每个神经元都有一个偏置。
第十五行代码:W3 = np.array([[7, -8], [-9, 10]])
定义了第三层的权重矩阵W3,其大小为2x2,表示有两个神经元和两个输入。
第十六行代码:b3 = np.array([2, 2])
定义了第三层的偏置向量b3,其大小为2,表示有两个神经元,每个神经元都有一个偏置。
第十七行代码:a1 = dense(x, W1, b1, np.tanh)
调用dense函数,计算第一层的输出向量a1,其中输入向量为x,权重矩阵为W1,偏置向量为b1,激活函数为tanh。
第十八行代码:a2 = dense(a1, W2, b2, np.tanh)
调用dense函数,计算第二层的输出向量a2,其中输入向量为a1,权重矩阵为W2,偏置向量为b2,激活函数为tanh。
第十九行代码:a3 = dense(a2, W3, b3, np.tanh)
调用dense函数,计算第三层的输出向量a3,其中输入向量为a2,权重矩阵为W3,偏置向量为b3,激活函数为tanh。
第二十行代码:f_x = a3
将第三层的输出向量a3赋值给变量f_x,表示神经网络的最终输出。
第二十一行代码:return f_x
返回神经网络的最终输出向量f_x。
第二十二行代码:a_in = np.array([-2, 4])
定义了输入向量a_in,其大小为2。
第二十三行代码:print(sequential(a_in))
调用sequential函数,对输入向量a_in进行前向传播,输出神经网络的最终输出向量。
阅读全文
相关推荐
















