机器学习数据以数组形式表示。
在 Python 中,数据几乎普遍以 NumPy 数组的形式表示。
如果您是 Python 新手,可能会对一些访问数据的 Pythonic 方式感到困惑,例如负索引和数组切片。
在本教程中,您将学习如何在 NumPy 数组中正确操作和访问数据。
完成本教程后,您将了解:
- 如何将列表数据转换为 NumPy 数组。
- 如何使用 Pythonic 索引和切片访问数据。
- 如何调整数据大小以满足某些机器学习 API 的期望。
通过我的新书《机器学习的线性代数》启动您的项目,包括分步教程和所有示例的 Python 源代码文件。
让我们开始吧。
- 2019 年 7 月更新:修复了与重塑 1D 数据相关的微小拼写错误(感谢 Rodrigue)。

如何在 Python 中为机器学习索引、切片和重塑 NumPy 数组
图片由 Björn Söderqvist 提供,保留部分权利。
教程概述
本教程分为4个部分,它们是:
- 从列表到数组
- 数组索引
- 数组切片
- 数组重塑
在机器学习线性代数方面需要帮助吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
1. 从列表到数组
一般来说,我建议使用 Pandas 甚至 NumPy 函数从文件加载数据。
有关示例,请参阅帖子
本节假设您已通过其他方式加载或生成了数据,并且现在数据以 Python 列表的形式表示。
让我们看看如何将列表中的数据转换为 NumPy 数组。
一维列表到数组
您可能会加载或生成数据并以列表形式访问它。
您可以通过调用 array() NumPy 函数将一维数据列表转换为数组。
1 2 3 4 5 6 7 8 |
# 一维示例 from numpy import array # 数据列表 data = [11, 22, 33, 44, 55] # 数据数组 data = array(data) print(data) print(type(data)) |
运行示例将一维列表转换为 NumPy 数组。
1 2 |
[11 22 33 44 55] <class 'numpy.ndarray'> |
二维列表到数组
在机器学习中,您更可能拥有二维数据。
这是一个数据表,其中每一行代表一个新的观测值,每一列代表一个新的特征。
也许您使用自定义代码生成或加载了数据,现在您有一个列表的列表。每个列表都代表一个新的观测值。
您可以通过调用 array() 函数,以与上述相同的方式将列表的列表转换为 NumPy 数组。
1 2 3 4 5 6 7 8 9 10 |
# 二维示例 from numpy import array # 数据列表 data = [[11, 22], [33, 44], [55, 66]] # 数据数组 data = array(data) print(data) print(type(data)) |
运行示例显示数据已成功转换。
1 2 3 4 |
[[11 22] [33 44] [55 66]] <class 'numpy.ndarray'> |
2. 数组索引
一旦您的数据以 NumPy 数组的形式表示,您就可以使用索引来访问它。
让我们看一些通过索引访问数据的示例。
一维索引
一般来说,索引的工作方式与您在其他编程语言(如 Java、C# 和 C++)中的经验预期相同。
例如,您可以使用方括号运算符 [] 访问元素,指定要检索的值的零偏移索引。
1 2 3 4 5 6 7 |
# 简单索引 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) # 索引数据 print(data[0]) print(data[4]) |
运行示例打印数组中的第一个和最后一个值。
1 2 |
11 55 |
指定超出数组边界的过大整数将导致错误。
1 2 3 4 5 6 |
# 简单索引 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) # 索引数据 print(data[5]) |
运行示例打印以下错误
1 |
IndexError: index 5 is out of bounds for axis 0 with size 5 |
一个关键区别是您可以使用负索引来检索相对于数组末尾偏移的值。
例如,索引 -1 指的是数组中的最后一个项目。索引 -2 返回倒数第二个项目,一直到当前示例中的第一个项目的 -5。
1 2 3 4 5 6 7 |
# 简单索引 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) # 索引数据 print(data[-1]) print(data[-5]) |
运行示例打印数组中的最后一个和第一个项目。
1 2 |
55 11 |
二维索引
索引二维数据与索引一维数据类似,只是使用逗号分隔每个维度的索引。
1 |
数据[0,0] |
这与基于 C 的语言不同,在这些语言中,每个维度都使用单独的方括号运算符。
1 |
数据[0][0] |
例如,我们可以按如下方式访问第一行和第一列
1 2 3 4 5 6 |
# 2d 索引 from numpy import array # 定义数组 data = array([[11, 22], [33, 44], [55, 66]]) # 索引数据 print(data[0,0]) |
运行示例打印数据集中第一个项目。
1 |
11 |
如果我们对第一行中的所有项目感兴趣,我们可以将第二个维度索引留空,例如
1 2 3 4 5 6 |
# 2d 索引 from numpy import array # 定义数组 data = array([[11, 22], [33, 44], [55, 66]]) # 索引数据 print(data[0,]) |
这将打印第一行数据。
1 |
[11 22] |
3. 数组切片
到目前为止,一切顺利;创建和索引数组看起来很熟悉。
现在我们来看数组切片,这是 Python 和 NumPy 数组初学者会遇到问题的一个特性。
列表和 NumPy 数组等结构可以进行切片。这意味着可以索引和检索结构的子序列。
这在机器学习中指定输入变量和输出变量,或将训练行与测试行分开时最有用。
切片使用冒号运算符“:”指定,并在冒号前后分别带有“from”和“to”索引。切片从“from”索引开始,在“to”索引之前的一个项目处结束。
1 |
data[from:to] |
让我们看一些例子。
一维切片
您可以通过指定没有索引的切片“:”来访问数组维度中的所有数据。
1 2 3 4 5 |
# 简单切片 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) print(data[:]) |
运行示例打印数组中的所有元素。
1 |
[11 22 33 44 55] |
数组的第一个项目可以通过指定从索引 0 开始到索引 1 结束(“to”索引前一个项目)的切片来切片。
1 2 3 4 5 |
# 简单切片 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) print(data[0:1]) |
运行示例返回一个包含第一个元素的子数组。
1 |
[11] |
我们也可以在切片中使用负索引。例如,我们可以通过从 -2(倒数第二个项目)开始切片而不指定“to”索引来切片列表中的最后两个项目;这将切片一直到维度的末尾。
1 2 3 4 5 |
# 简单切片 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) print(data[-2:]) |
运行示例返回一个仅包含最后两个项目的子数组。
1 |
[44 55] |
二维切片
让我们看看您在机器学习中最可能使用的两个二维切片示例。
拆分输入和输出特征
通常将加载的数据拆分为输入变量 (X) 和输出变量 (y)。
我们可以通过切片所有行和所有列直到(但不包括)最后一列,然后单独索引最后一列来实现此目的。
对于输入特征,我们可以通过在行索引中指定“:”,在列索引中指定 :-1 来选择除最后一列外的所有行和所有列。
1 |
X = [:, :-1] |
对于输出列,我们可以再次使用“:”选择所有行,并通过指定 -1 索引仅索引最后一列。
1 |
y = [:, -1] |
将所有这些放在一起,我们可以将一个 3 列的 2D 数据集分离为输入和输出数据,如下所示
1 2 3 4 5 6 7 8 9 10 |
# 拆分输入和输出 from numpy import array # 定义数组 data = array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) # 分离数据 X, y = data[:, :-1], data[:, -1] print(X) print(y) |
运行示例打印分离的 X 和 y 元素。请注意,X 是一个 2D 数组,y 是一个 1D 数组。
1 2 3 4 |
[[11 22] [44 55] [77 88]] [33 66 99] |
拆分训练和测试行
通常将加载的数据集拆分为单独的训练集和测试集。
这是行的拆分,其中一部分将用于训练模型,其余部分将用于估计训练模型的技能。
这将涉及通过在第二个维度索引中指定“:”来切片所有列。训练数据集将是从开始到分割点的所有行。
1 2 |
数据集 train = data[:split, :] |
测试数据集将是从分割点到维度末尾的所有行。
1 |
test = data[split:, :] |
将所有这些放在一起,我们可以将数据集在设定的分割点 2 处拆分。
1 2 3 4 5 6 7 8 9 10 11 |
# 拆分训练和测试 from numpy import array # 定义数组 data = array([[11, 22, 33], [44, 55, 66], [77, 88, 99]]) # 分离数据 split = 2 train,test = data[:split,:],data[split:,:] print(train) print(test) |
运行示例选择前两行进行训练,最后一行用于测试集。
1 2 3 |
[[11 22 33] [44 55 66]] [[77 88 99]] |
4. 数组重塑
切片数据后,您可能需要重塑它。
例如,某些库(例如 scikit-learn)可能要求将一维输出变量数组 (y) 重塑为具有一列和每行结果的二维数组。
一些算法,例如 Keras 中的长短期记忆循环神经网络,要求将输入指定为由样本、时间步和特征组成的三维数组。
了解如何重塑 NumPy 数组以使您的数据符合特定 Python 库的期望非常重要。我们将看这两个示例。
数据形状
NumPy 数组有一个 shape 属性,该属性返回一个表示数组每个维度长度的元组。
例如:
1 2 3 4 5 |
# 数组形状 from numpy import array # 定义数组 data = array([11, 22, 33, 44, 55]) print(data.shape) |
运行示例打印一维的元组。
1 |
(5,) |
对于二维数组,将返回一个包含两个长度的元组。
1 2 3 4 5 6 7 8 9 |
# 数组形状 from numpy import array # 数据列表 data = [[11, 22], [33, 44], [55, 66]] # 数据数组 data = array(data) print(data.shape) |
运行示例返回一个包含行数和列数的元组。
1 |
(3, 2) |
您可以在形状维度中使用数组维度的尺寸,例如指定参数。
元组的元素可以像数组一样访问,其中第 0 个索引表示行数,第 1 个索引表示列数。例如
1 2 3 4 5 6 7 8 9 10 |
# 数组形状 from numpy import array # 数据列表 data = [[11, 22], [33, 44], [55, 66]] # 数据数组 data = array(data) print('行数: %d' % data.shape[0]) print('列数: %d' % data.shape[1]) |
运行示例访问每个维度的特定大小。
1 2 |
行数: 3 列数: 2 |
将 1D 重塑为 2D 数组
通常需要将一维数组重塑为具有一列和多行的二维数组。
NumPy 在 NumPy 数组对象上提供了 reshape() 函数,可用于重塑数据。
reshape() 函数接受一个参数,该参数指定数组的新形状。在将一维数组重塑为具有一列的二维数组的情况下,元组将是数组形状作为第一个维度 (data.shape[0]),第二个维度为 1。
1 |
data = data.reshape((data.shape[0], 1)) |
将所有这些放在一起,我们得到以下工作示例。
1 2 3 4 5 6 7 8 9 |
# 重塑 1D 数组 from numpy import array from numpy import reshape # 定义数组 data = array([11, 22, 33, 44, 55]) print(data.shape) # 重塑 data = data.reshape((data.shape[0], 1)) print(data.shape) |
运行示例打印一维数组的形状,将数组重塑为 5 行 1 列,然后打印此新形状。
1 2 |
(5,) (5, 1) |
将 2D 重塑为 3D 数组
通常需要将二维数据(其中每一行代表一个序列)重塑为三维数组,以供需要多个样本、一个或多个时间步和一个或多个特征的算法使用。
一个很好的例子是 Keras 深度学习库中的 LSTM 循环神经网络模型。
可以直接使用 reshape 函数,指定新的维度。这在每个序列有多个时间步,每个时间步有一个观测值(特征)的示例中很清楚。
我们可以使用数组的 shape 属性中的大小来指定样本数(行)和列数(时间步),并将特征数固定为 1。
1 |
data.reshape((data.shape[0], data.shape[1], 1)) |
将所有这些放在一起,我们得到以下工作示例。
1 2 3 4 5 6 7 8 9 10 11 12 |
# 重塑 2D 数组 from numpy import array # 数据列表 data = [[11, 22], [33, 44], [55, 66]] # 数据数组 data = array(data) print(data.shape) # 重塑 data = data.reshape((data.shape[0], data.shape[1], 1)) print(data.shape) |
运行示例首先打印 2D 数组中每个维度的大小,然后重塑数组,最后总结新 3D 数组的形状。
1 2 |
(3, 2) (3, 2, 1) |
进一步阅读
如果您想深入了解此主题,本节提供了更多资源。
总结
在本教程中,您学习了如何使用 Python 在 NumPy 数组中访问和重塑数据。
具体来说,你学到了:
- 如何将列表数据转换为 NumPy 数组。
- 如何使用 Pythonic 索引和切片访问数据。
- 如何调整数据大小以满足某些机器学习 API 的期望。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
很棒的文章。虽然使用 python 一段时间了,但仍然学到了很多基础知识。
很高兴它有帮助!
关于将一维数组转换为矩阵形式(2D),我有一个疑问。为什么我们必须在机器学习中将 1D 转换为 2D?
大多数机器学习算法期望矩阵作为输入,其中每一行是一个观测值。
尊敬的 Jason 博士,:,
感谢您提供此切片教程。它肯定会帮助我理解您页面上的 LSTM 材料和您的电子书。
我的问题是关于 2-D 切片和切片方法。我想要一个“广义”的切片概念。
在一维切片中,数组可以拆分为
myarray[from:to] – 这已理解
在二维切片中,“拆分输入和输出特征”部分,您给出了两个拆分的例子
x = [ : , :-1]
y = [ : , -1]
请在 myarray[from:to] 的上下文中澄清,特别是对于 2D 切片,尤其是有两个冒号“:”的情况
myarray[from: to] 和 x [ : , : -1] 对于 x,to = : ,from = : – 1,
谢谢你,
新南威尔士州的安东尼
好问题,安东尼!
当您只提供一个索引而不是切片时,比如 -1,它将只选择该列/行,在本例中是最后一列。
这有帮助吗?
你好;
感谢如此精彩的教程,我是 numpy 的新手。当我正在处理深度学习算法时,在程序的某个时刻,我需要创建一个 (1000,256,256,3) 维度的数组,其中可以加载 1000 张图像数据(大小为 256*256*3)。
您能否帮助我在 Python 中实现此功能。
代码如下
x_train=np.empty([256,256,3])
for i in range(0,1000)
pic= Image.open(f'{path}%s.jpg’ %i)
pic=pic.resize([256,256])
x_train2= np.asarray(pic)
x_train=np.stack((x_train,x_train2))
print(x_train.shape)
谢谢
一个很好的技巧是将数据加载到列表中,将列表转换为数组,然后将数组重塑为所需的维度。
太棒了。这是我见过的最好的描述。
谢谢,很高兴对您有帮助。
嗨,Jason,
如何将 3D 数组转换为 1D 数组?
请帮助我..
X = X.reshape((X.shape[0], X.shappe[1], 1))
X=X.reshape((X.shape[0]*X.shape[1]*X.shape[2],1))
我们可以像 C 语言一样访问 2D 数组:data[0][0]。
使用 data[0, 0] 并不是你所说的唯一方式。
你使用的是哪个版本的 python?
使用 [i, j] 对于 Python 2 和 3 中的 2d numpy 数组访问是有效的。
先生,您能帮我这个忙吗?您的帮助将不胜感激。提前感谢!
https://stackoverflow.com/questions/55645616/how-to-output-masks-using-vis-util-visualize-boxes-and-labels-on-image-array
您能用一两句话概括一下问题吗?
我找这个信息找了很久。非常非常感谢您,先生
不客气!
Jason,你帮了我很多
很高兴它有帮助。
非常感谢您的这份清晰的教程。
很高兴它有帮助。
你好,我正在处理 3d 时间序列数据的归一化问题。
我有 3d 时间序列数据(样本、特征、时间步)。
我应该如何重塑我的 3d 数据进行归一化?
我猜是这样的
从 [样本、特征、时间步] 到 ([时间步、特征] 或 [特征、时间步]),然后使用 MinMaxScaler 对训练数据进行 fit_transform,然后对测试数据进行 transform?
对于所有样本的每个时间序列进行归一化是个好主意。
我在这里给出例子
https://machinelearning.org.cn/machine-learning-data-transforms-for-time-series-forecasting/
非常感谢您提供这份非常有用的、易于理解的 NumPy 数组入门教程。它非常有帮助。
谢谢,很高兴对您有帮助。
你好 jason,
我的数据框包含非图像数据,维度为 (1446736, 11)。
如何重塑此数组以馈入 CNN 模型
这可能有帮助
https://machinelearning.org.cn/faq/single-faq/what-is-the-difference-between-samples-timesteps-and-features-for-lstm-input
谢谢 Jason,这适用于 CNN 模型以及 LSTM 吗?
是的。
嗨 Jason,感谢您的教程,它确实有助于巩固基础知识。
我有一个有点相关的问题——numpy reshape 函数的默认重塑顺序是 C。在 Keras 中工作时,使用 numpy reshape 或 Keras 原生 reshape 有什么区别吗?它使用相同的顺序吗?如果不是,是否可以直接在 Keras 代码中使用 numpy 原生函数?
谢谢! 🙂
它们解决不同的问题。
您可以使用 numpy 重塑数组。
Keras 提供了一个重塑层,用于重塑作为神经网络一部分的张量。
你真棒!解释得太好了。谢谢!
谢谢,很高兴对您有帮助。
你好,
只是想知道如何导入一个 2D 数组数据集?
谢谢
你的意思是文件加载吗?
这个可能会有帮助
https://machinelearning.org.cn/load-machine-learning-data-python/
您非常周到地提供了这个教程,否则,我很难遵循您的机器学习教程,非常感谢
谢谢,很高兴对您有帮助。
最棒的文章之一!!
谢谢!
先生,非常感谢您的这篇文章。
不客气。
嗨 Jason,再次感谢您提供这个精彩的教程。我在第 4 节关于重塑的以下句子中遇到问题。
例如,某些库(如 scikit-learn)可能要求将一维输出变量 (y) 数组重塑为具有一列和每列结果的二维数组。
我不太明白,是不是?
例如,某些库(如 scikit-learn)可能要求将一维输出变量 (y) 数组重塑为具有一列和每“行”结果的二维数组。
事实上,我很困惑。
非常感谢您所做的工作。
是的,我指的是行。已更新。
是的,所以 [1, 2, 3] 是一个形状为 (3,) 的 1D 数组,它变成 [[1, 2, 3]],或者是一个具有 3 行形状 (1,3) 的一列。
尊敬的先生,我想将我的 tfidf 向量(形状为 156060×15103)输入到 LSTM 层,其中包含 150 个时间序列步和 15103 个特征。我的 LSTM 输入应该看起来像 (None, 150, 15103)。我该如何实现这一点?请帮助我。
如果数组重塑在此处没有帮助,请提出任何替代方法,说明如何使用 tfidf 输入创建 (None, 150, 15103) 的 LSTM 层。
我的目标是将 tfidf 输出作为 LSTM 层的输入,其中包含 150 个时间步。
我的目标是将 tfidf 输出作为 LSTM 层的输入,其中包含 150 个时间步。
请帮忙。
在第一个 LSTM 层上设置 input_shape 参数为所需形状。
如何让用户输入 3D 并将其作为逆向求解
抱歉,我没明白。你能详细说明一下吗?
嗨,Jason,
我遇到了一些奇怪的索引问题,我似乎有正确的坐标来调用 `cv2.rectangle()` 和 `plt.Rectangle()`,但使用相同的坐标进行切片却不起作用,即 y1 和 y2 需要反转。我在 OpenCV Github 上有一个问题,但如果您有空,能看一眼吗? https://github.com/opencv/opencv/issues/15406
很抱歉听到这个消息,这听起来像是一个 opencv 问题,而不是 python 数组问题。
祝你好运。
我有一个 .dat 文件,其中包含矩阵图像,大小为 784x1990,即总共有 1990 张图像,矩阵的每一列对应一张大小为 28x28 像素的图像。如何将其可视化。请帮助。
矩阵对应一张大小为 28x28 像素的图像。如何将其可视化。请帮助。
也许这会有帮助。
https://machinelearning.org.cn/how-to-load-and-manipulate-images-for-deep-learning-in-python-with-pil-pillow/
很棒的文章!
我有一个要输入到堆叠 LSTM 的数据。数据形状为 (81,25,12)。当我使用 model.predict 进行预测时,输出当然会再次是 3D (81,25,12)。但我想单独绘制每个特征。我想将输出转换回 2D 并切片每个列/特征以进行误差计算和绘图。
如何将 3D 转换回 2D 数组?
非常感谢 Jason!
输出不必是 3d,输出可以是您模型中设计的任何形状。
尽管如此,您可以使用 reshape() 函数重塑数组
数据 = 数据.reshape((??))
嗨,Jason,
您能解释一下 2D 数组的数组切片,例如 [:,:,1] 吗?
是的,它选择所有行和第 0 列。
这是我遇到过的最好的机器学习培训……谢谢
谢谢。
尊敬的Jason博士,
在“二维切片”标题下
它写道
“对于输入特征,我们可以选择除最后一列外的所有行和列,通过…”
澄清一下
“对于输入特征,我们可以选择除最后一列外的所有行和所有列,通过…”
它写道
“对于输出列,我们可以再次使用”选择所有行
并只索引最后一列,通过…”
澄清一下
“对于输出列,我们可以再次使用”选择所有行
并只索引最后一行,通过…”
原因是,在最后一个示例中,显示了最后一行的所有列。
或者,只显示最后一行。
谢谢你,
悉尼的Anthony
尊敬的Jason博士,
我对第 2 节的进一步阐述
#选择所有行和前两列
doo[:,0:2]
array([[1, 2],
[4, 5],
[7, 8]])
列表并非详尽无遗,但通过实验您可以更好地理解。
谢谢你,
悉尼的Anthony
尊敬的Jason博士,
虽然上述方法着眼于选择“连续”的行或列,但最后的接触是选择特定的列或特定的行。
仍在探索矩阵选择的基础知识,
请问一个问题
如果你有一个 3D 矩阵,如何切片一个矩阵。
谢谢你
悉尼的Anthony
熟练掌握 Python 中的切片很重要。
干得好!
谢谢。
尊敬的Jason博士,
我尝试了切片 3D 数组。我能够选择特定的列和特定的行。我不知道 3D 数组是否被切片,或者切片 3D 数组是否有应用。所以这里是。
我注意到切片技术并非详尽无遗。
无论您称之为选择还是切片,都取决于您是使用索引还是切片运算符“:”。
无论采用何种过程,最终结果都是您想获得原始数据结构的子集。
3D切片和/或选择的应用是什么?
谢谢你
悉尼的Anthony
干得好!
尊敬的阿德里安博士,
我遇到了一个具有四个参数的数组拆分
我明白它在特定位置用0代替
简化:通过替换a,b,c,d
a, b, c, d 是什么?a,b,c,d 对行和列有什么影响?
谢谢你,
悉尼的安东尼,谢谢你,
悉尼的Anthony
是的,那是行的“从”和“到”,然后是列。
尊敬的Jason博士,
根据实验,a和b表示选择第a行到第b-1行,同时选择从第c列到第c-1列的剩余部分。
例如;
假设我们对doo执行了切片操作
如果我们给这些元素赋值
回到
总而言之,执行切片操作
我希望能穷尽所有可能的索引切片方法
谢谢你,
悉尼的Anthony
在更高级的用例中,您可能需要切换某个矩阵的维度。在机器学习应用中,这通常是模型期望的输入形状与数据集不同时的情况。NumPy 的
是的,我想我在这里用moveaxis()和图像给出了例子
https://machinelearning.org.cn/a-gentle-introduction-to-channels-first-and-channels-last-image-formats-for-deep-learning/
请问我如何将一维数组转换为七维数组?
您可以使用 reshape() 函数指定现有 numpy 数组的维度。
Numpy切片和重塑的优秀工作流程……从您的文章中获得了大量知识……这在我的工作中帮助了我很多……谢谢
很高兴听到这个!
解释得比Stack Overflow好。谢谢你,伙计)
谢谢!
多么棒的教程,非常感谢您的出色工作。继续保持好工作
谢谢,很高兴它有帮助!
本教程真的很有帮助。非常感谢。我的数据集是3维数组,例如(样本数,行数,列数),我如何将其作为输入提供给RNN?因为RNN接受的输入是(样本,时间步,特征),对吗?
不客气。
好问题,请看这个
https://machinelearning.org.cn/faq/single-faq/what-is-the-difference-between-samples-timesteps-and-features-for-lstm-input
“如何为机器学习索引、切片和重塑NumPy数组”
好的,我为此已经努力了数周……,仔细阅读您的帖子,然后试图弄清楚您是如何做到的,尤其是当代码无法在我的系统上顺利运行时。
但这篇文章最雄辩地解释了我过去几周所面临问题的根源。
这与我缺乏对不同Python“库”和网络模型需要不同数据格式进行输入/输出的理解/知识有关。
今天我找到了这篇帖子,它为像我这样的初学者解释了数据准备的基础知识。
非常感谢。
我有三个问题要问您
1.
这些都在你的书里吗?
2.
您能否重新设计这个网站,以便在左侧边栏显示一个网站的“目录”,类似于(https://pandas.ac.cn/docs/getting_started/intro_tutorials/index.html),从初级水平开始?这将肯定有助于导航和故障排除。我需要花费数小时才能找到我正在寻找的一些答案,而它们就在我的眼皮底下。
3.
你有你的书的纸质版吗?
Winner
我在这本书中介绍了数组索引/操作的基础知识
https://machinelearning.org.cn/linear_algebra_for_machine_learning/
很好的建议,这可能有所帮助
https://machinelearning.org.cn/start-here/
关于硬拷贝
https://machinelearning.org.cn/faq/single-faq/can-i-get-a-hard-copy-of-your-book
非常感谢杰森!这对我这个初学者来说非常清晰和有帮助。只是想检查一下这句话中是否有打字错误:“通常需要将一维数组重塑为一列多行(原文如此)的二维数组。” 您是指*行吗?
谢谢,已修复!
如何从文本框 tkinter 输入矩阵值
tkinter 是什么?
我的意思是如何通过图形界面创建numpy数组和数组值用户干预
抱歉,我没有任何关于使用图形界面创建numpy数组的教程。
一篇非常好的教程。有一个可以改进的地方:我会添加几句关于 train-test-split() 方法的说明,或者提供一些参考文献的链接,比如下面的这个
https://realpython.com/train-test-split-python-data/
你可以在这里了解更多
https://machinelearning.org.cn/train-test-split-for-evaluating-machine-learning-algorithms/
一流的贡献,谢谢你
谢谢!
嗨,Jason,
从一个形状中检索一维索引的最佳方法是什么?假设我有一个由2个变量组成的状态,它们被分成(20, 30)个bin,我想构建一个形状为(600, 3)的Q值表。
我需要经常将二维索引转换为一维索引。例如,从[1, 2]到1*20 + 2 = 22。我们有什么方法可以在numpy中轻松做到这一点吗?
我能想到的只有
如果 dims = [20, 30]
dims[-1] = 1
以及 idx = np.dot(dims, state_idx),其中 state_idx = [1, 2] 例如
有没有更优雅的方法
抱歉,我不明白你的问题。
也许可以尝试发布到stackoverflow。
嗨,Jason,
1. 我该如何解决层不兼容和数组数据重塑的问题?
2. 在 LSTM 中,哪些参数可以提高模型的准确性,例如优化器、度量等?
也许你可以使用重塑层?
本网站的这部分内容是关于提高模型性能的
https://machinelearning.org.cn/start-here/#better
嗨,Jason,
我正在尝试将两个未知大小的二维数组相乘,同时保留最大数组中的最后一列并将其复制到新的结果数组中。例如
数组 A = [1,2,3,4,5]
[6,7,8,9,10]
[11,12,13,14,15]
数组 B = [1,2,3,4]
[6,7,8,9,]
[11,12,13,14]
C = A x B,形状保持 3,5,其中第 5 列为 5,10,15
我知道索引使用特定位置,但是有没有办法使用第 n 个位置将其拆分为子数组?我希望将数组 A 拆分为一个子数组(在这种情况下是 4 列)以执行乘法。
或者,有没有办法在较小数组的最后一列中插入 1,使它们大小相同,从而得到相同的结果。
非常感谢任何帮助。
此致,
克雷格
您所说的肯定不是矩阵乘法。如果您想进行元素乘法,可以这样做
您必须使用切片使 C 的形状与 B 完全相同
感谢您在机器学习和深度学习方面所做的工作,这很有帮助。
非常欢迎 Tesfaye!我们祝您在机器学习之旅中一切顺利!