Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作二维形状的numpy数组_Python_Numpy_Numpy Ndarray - Fatal编程技术网

Python 如何制作二维形状的numpy数组

Python 如何制作二维形状的numpy数组,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,我有这样的简单数组 x = np.array([1,2,3,4]) In [3]: x.shape Out[3]: (4,) 但是我不希望shape返回(4,),而是(4,1)。如何实现这一点?如果要使用列向量 x2 = x[:, np.newaxis] x2.shape # (4, 1) 下面是你想要的。但是,我强烈建议您看看为什么需要shape返回(4,1)。大多数矩阵类型的操作都可以在没有这种显式转换的情况下进行 x = np.array([1,2,3,4]) y = np.mat

我有这样的简单数组

x = np.array([1,2,3,4])

In [3]: x.shape
Out[3]: (4,)

但是我不希望shape返回(4,),而是(4,1)。如何实现这一点?

如果要使用列向量

x2 = x[:, np.newaxis]
x2.shape  # (4, 1)

下面是你想要的。但是,我强烈建议您看看为什么需要
shape
返回(4,1)。大多数矩阵类型的操作都可以在没有这种显式转换的情况下进行

x = np.array([1,2,3,4])
y = np.matrix(x)
z = y.T

x.shape  # (4,)
y.shape  # (1, 4)
z.shape  # (4, 1)

或者,您可以自己重塑阵列:

arr1 = np.array([1,2,3,4])
print arr1.shape
# (4,)

arr2 = arr1.reshape((4,1))
print arr2.shape
# (4, 1)
当然,您可以在创建阵列时重塑阵列:

arr1 = np.array([1,2,3,4]).reshape((4,1))
如果要按照注释中@FHTMitchell的建议在适当位置更改阵列:

arr1.resize((4, 1))

通常在Numpy中,您可以使用
两个方括号
声明矩阵或向量。对一维矩阵或向量使用单方括号是常见的误解

以下是一个例子:

a = np.array([[1,2,3,4], [5,6,7,8]])
a.shape # (2,4) -> Multi-Dimensional Matrix
类似地,如果我想要一维矩阵,那么只需删除数据,而不是外部的
方括号

a = np.array([[1,2,3,4]])
a.shape # (1,4) -> Row Matrix

b = np.array([[1], [2], [3], [4]])
b.shape # (4, 1) -> Column Matrix
当使用单方括号时,可能会给出一些奇怪的尺寸

始终将数据放在此类一维矩阵的另一个方括号内(如输入多维矩阵的数据),而不包含这些额外维度的数据

另外:您也可以随时重塑

x = np.array([1,2,3,4])
x = x.reshape(4,1)
x.shape # (4,1)
一行:

x = np.array([1,2,3,4]).reshape(4,1)
x.shape # (4,1)

您可以使用
zip
在python(非numpy)级别进行转置:


请注意,尽管这在键击方面很方便,但考虑到必须为每个列表元素构造一个元组对象,而重塑数组基本上是免费的,这有点浪费。因此,不要在长列表中使用此选项。

这会改变类型,从而产生连锁反应
x*x.T==数组([1,4,9,16])
但是
y*y.T=矩阵([30]])
。由于python添加了
@
操作符(py 3.5),建议不要使用
np.matrix
@FHTMitchell,是的,它确实会更改类型。如果用户在python版本上,或者甚至在适当的位置
arr1=np.array([1,2,3,4]);arr1.resize((4,1))
您可以给出一个用例来说明为什么需要(4,1)。给出有效的上下文可能有助于其他人理解这个问题。使用单方括号创建的1d数组在
numpy
中是完全正常的。虽然(1,4)和(4,1)数组有很好的用途,但我更喜欢将(4,)作为默认形状。这没有什么奇怪的@我不是说没用的。这是一个简单的秩1数组。使用numpy的问题是,我们像在矩阵中一样执行计算,(4,)的维数有时会带来不一致性。像a,和a.T似乎没有任何区别。如果你处理大量的数据,那么你将需要一些特定的维度,而不仅仅是(4),因为一些数学运算可能会提供一些不一致性,并会花费一整天的时间来查找bug。谢谢
>>> a = [1, 2, 3, 4]
>>> 
>>> *zip(a),
((1,), (2,), (3,), (4,))
>>> 
>>> import numpy as np
>>> np.array([*zip(a)])
array([[1],
       [2],
       [3],
       [4]])