是否有一个numpy函数可以确保一维或二维数组是列向量或行向量?
例如,我有以下向量/列表之一。将任何输入转换为列向量的最简单方法是什么?
x1 = np.array(range(5))
x2 = x1[np.newaxis, :]
x3 = x1[:, np.newaxis]
def ensureCol1D(x):
# The input is either a 0D list or 1D.
assert(len(x.shape)==1 or (len(x.shape)==2 and 1 in x.shape))
x = np.atleast_2d(x)
n = x.size
print(x.shape, n)
return x if x.shape[0] == n else x.T
assert(ensureCol1D(x1).shape == (x1.size, 1))
assert(ensureCol1D(x2).shape == (x2.size, 1))
assert(ensureCol1D(x3).shape == (x3.size, 1))
Run Code Online (Sandbox Code Playgroud)
不是编写我自己的函数ensureCol1D,是否有类似的东西可以numpy确保向量成为列?
您的问题本质上是如何将数组转换为“列”,列是行长度为 1 的二维数组。这可以通过ndarray.reshape(-1, 1).
这意味着您reshape的数组的行长度为一,并让 numpy 推断行数/列长度。
x1 = np.array(range(5))
print(x1.reshape(-1, 1))
Run Code Online (Sandbox Code Playgroud)
输出:
array([[0],
[1],
[2],
[3],
[4]])
Run Code Online (Sandbox Code Playgroud)
x2重塑和时您会得到相同的输出x3。此外,这也适用于 n 维数组:
x = np.random.rand(1, 2, 3)
print(x.reshape(-1, 1).shape)
Run Code Online (Sandbox Code Playgroud)
输出:
(6, 1)
Run Code Online (Sandbox Code Playgroud)
最后,这里唯一缺少的是您进行一些断言,以确保无法转换的数组不会被错误地转换。您要做的主要检查是形状中非一整数的数量是否小于或等于一。这可以通过以下方式完成:
assert sum(i != 1 for i in x1.shape) <= 1
Run Code Online (Sandbox Code Playgroud)
通过此检查,.reshape您可以将逻辑应用于所有 numpy 数组。
| 归档时间: |
|
| 查看次数: |
1207 次 |
| 最近记录: |