是否有一个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))
与编写我自己的函数ensureCol1D
不同,在numpy
中是否已经有类似的东西可以确保向量成为列?
发布于 2019-01-28 13:26:19
您的问题本质上是如何将数组转换为“列”,列是一行长度为1的二维数组,这可以用ndarray.reshape(-1, 1)
完成。
这意味着reshape
数组的行长度为1,并让numpy推断行/列长度的数目。
x1 = np.array(range(5))
print(x1.reshape(-1, 1))
输出:
array([[0],
[1],
[2],
[3],
[4]])
在重塑x2
和x3
时,您将得到相同的输出。此外,这也适用于n维数组:
x = np.random.rand(1, 2, 3)
print(x.reshape(-1, 1).shape)
输出:
(6, 1)
最后,这里唯一缺少的是,您可以做出一些断言,以确保不能转换的数组不会被错误地转换。您正在进行的主要检查是,形状中的非一个整数的数目小于或等于一个整数。这可以通过以下方式来完成:
assert sum(i != 1 for i in x1.shape) <= 1
这个检查和.reshape
一起让我们将逻辑应用于所有numpy数组。
https://stackoverflow.com/questions/54410374
复制相似问题