遍历 python 中的 Numpy 数组行,即使是 1 行/2 列数组
Iterating over Numpy Array rows in python even with 1 row / 2 columns array
我正在尝试遍历 numpy 数组的行。该数组可能由两列和多行组成,如 [[a, b], [c, d], ...]
,或者有时由单行组成,如 [a, b]
.
对于一维数组,当我使用 enumerate
遍历行时,python 生成单个元素 a
然后 b
而不是完整的行[a, b]
一次全部。
如何以与二维情况相同的方式迭代一维情况?
Numpy 无论如何都会迭代第一维。在迭代之前检查形状。
>>> x = np.array([1, 2])
>>> x.ndim
1
>>> y = np.array([[1, 2], [3, 4], [5, 6]])
>>> y.ndim
2
可能最简单的方法是始终包装对 np.array
:
的调用
>>> x = np.array(x, ndmin=2, copy=False)
>>> y = np.array(y, ndmin=2, copy=False)
这将根据需要在您的数组中添加一个形状为 1 的维度。它的优点是您的输入甚至不必是数组,只需可以转换为数组的东西即可。
另一种选择是使用 atleast_2d
函数:
>>> x = np.atleast_2d(x)
综上所述,您可能首先通过尝试香草 python 循环而牺牲了使用 numpy 的大部分好处。尝试将您的操作向量化。
我正在尝试遍历 numpy 数组的行。该数组可能由两列和多行组成,如 [[a, b], [c, d], ...]
,或者有时由单行组成,如 [a, b]
.
对于一维数组,当我使用 enumerate
遍历行时,python 生成单个元素 a
然后 b
而不是完整的行[a, b]
一次全部。
如何以与二维情况相同的方式迭代一维情况?
Numpy 无论如何都会迭代第一维。在迭代之前检查形状。
>>> x = np.array([1, 2])
>>> x.ndim
1
>>> y = np.array([[1, 2], [3, 4], [5, 6]])
>>> y.ndim
2
可能最简单的方法是始终包装对 np.array
:
>>> x = np.array(x, ndmin=2, copy=False)
>>> y = np.array(y, ndmin=2, copy=False)
这将根据需要在您的数组中添加一个形状为 1 的维度。它的优点是您的输入甚至不必是数组,只需可以转换为数组的东西即可。
另一种选择是使用 atleast_2d
函数:
>>> x = np.atleast_2d(x)
综上所述,您可能首先通过尝试香草 python 循环而牺牲了使用 numpy 的大部分好处。尝试将您的操作向量化。