如何在numpy中改变数组形状?

12
如果我创建一个数组X = np.random.rand(D, 1),它的形状为(3,1):
[[ 0.31215124]
 [ 0.84270715]
 [ 0.41846041]]

如果我创建自己的数组A = np.array([0,1,2]),那么它的形状为(1,3),看起来像这样

[0 1 2]

我如何强制让我的数组 A 形状为 (3,1)


抱歉,您是在寻找A.reshape([3,1])吗? - EdChum
5个回答

7
你可以直接将形状元组分配给 numpy.ndarray.shape
A.shape = (3,1)

截至2022年,文档说明如下:
设置arr.shape是不被鼓励的,并且将来可能会被弃用。使用ndarray.reshape是首选方法。
当前最佳解决方案为:
A = np.reshape(A, (3,1))

1
也许有人对你使用“function”很挑剔。np.reshape是一个函数,A.reshape是一个方法,而A.shape=则是一种功能?它们都可以完成同样的工作。 - hpaulj
设置“shape”有时会引发错误,不保证在所有情况下都起作用。只是添加信息,我不是点踩的人。 - Bi Rico
np.reshape文档中提到:如果您希望在数据被复制时引发错误,您应该将新形状分配给数组的形状属性。 事实上,a.shape=并不总是有效,这可能是一件好事。您还有其他情况想到吗? - hpaulj
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html#numpy.ndarray.shape 没有提供任何关于何时.shape=是错误的警告。 - hpaulj

6
A=np.array([0,1,2])
A.shape=(3,1)

或者
A=np.array([0,1,2]).reshape((3,1))  #reshape takes the tuple shape as input

1
numpy模块中有一个reshape函数,而ndarray则有一个reshape方法,两者都可以用来创建你需要的数组形状:
import numpy as np
A = np.reshape([1, 2, 3, 4], (4, 1))
# Now change the shape to (2, 2)
A = A.reshape(2, 2)

Numpy将检查数组的大小不会改变,即prod(old_shape) == prod(new_shape)。由于这种关系,您可以用-1替换形状中的一个值,Numpy会自动解决:
A = A.reshape([1, 2, 3, 4], (-1, 1))

0

您可以直接设置形状,例如:

A.shape = (3L, 1L)

或者您可以使用resize函数:

A.resize((3L, 1L))

或在使用reshape创建时

A = np.array([0,1,2]).reshape((3L, 1L))

避免对shaperesize进行赋值,除非你知道自己在做什么,因为它们都有可能让新用户感到惊讶的行为。 - Bi Rico

0
你的一维数组形状为 (3,):
>>>A = np.array([0,1,2]) # create 1-D array
>>>print(A.shape) # print array shape
(3,)

如果您创建一个形状为(1,3)的数组,您可以使用其他答案中提到的numpy.reshapenumpy.swapaxes
>>>A = np.array([[0,1,2]]) # create 2-D array
>>>print(A.shape) # print array shape
>>>A = np.swapaxes(A,0,1) # swap 0th and 1st axes
>>>A # display array with swapped axes
(1, 3)
array([[0],
       [1],
       [2]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接