numpy 如何将数组中的条目转换为Python中的数组?

0yycz8jy  于 2023-06-29  发布在  Python
关注(0)|答案(4)|浏览(133)

我需要转换一个numpy数组如下:

[1,1,1,1] -> [[1],[1],[1],[1]]
z4bn682m

z4bn682m1#

使用np.reshape

import numpy as np

values = np.random.randint(1, 10, 10)
print(values)
values = values.reshape((-1, 1))
print(values)
# Before reshaping
[5 9 8 1 2 6 2 2 9 8]

# After reshaping
[[5]
 [9]
 [8]
 [1]
 [2]
 [6]
 [2]
 [2]
 [9]
 [8]]

使用-1告诉NumPy新形状应该与原始形状兼容(即它应该根据数组中元素的数量计算出该维度的值)。

wa7juj8i

wa7juj8i2#

虽然不是numpy,但你也可以在普通的Python中使用列表理解来轻松做到这一点:

>>> lst = [1,1,1,1]
>>> reshaped = [[el] for el in lst]
>>> print(reshaped)
[[1], [1], [1], [1]]
hk8txs48

hk8txs483#

对于已经给出的.reshape(-1,1),另一种方法是添加一个新轴

x=np.arange(4)
x[:,None]
#array([[0],
#       [1],
#       [2],
#       [3]])

请注意,这两个命令(reshape和[:,None])只创建了原始数组的视图。所以呢

x=np.arange(4)
x[:,None][0,0] = 12
x.reshape(-1,1)[1,0]=13
x
# [12, 13, 2, 3]

如果你想要一个新的数组,你可能需要.copy()结果。
在这种情况下,我不会在.reshape(-1,1)[:,None]之间有任何偏好。但是当你有一个以上的轴时,后者可能更灵活。例如,假设你有一个2d数组(我在这个例子中使用了reshape)

x=np.arange(12).reshape(-1, 4) # here I use reshape, because it is a shape that I want to specify : I want rows of 4.
# array([[ 0,  1,  2,  3],
#       [ 4,  5,  6,  7],
#       [ 8,  9, 10, 11]])

现在你想把它转换成

array([[ [0],  [1], [2],  [3]],
       [ [4],  [5], [6],  [7]],
       [ [8],  [9], [10], [11]]])

在这种情况下更难使用reshape。你需要知道你的x的形状(当然,这不是最高机密信息,但它变得不那么自然)。
你不能x.reshape(-1,-1,1)。你必须要么x.reshape(3,4,1),要么有一个,没有更多的,-1,如x.reshape(3,-1,1)x.reshape(-1,4,1)。或者,更一般地称为x.reshape(x.shape+(1,))
newaxis一样,由于我们只是添加一个轴,而不是指定轴的大小,因此它仍然与1D相同。

x[:,:,None]
# aka
x[:,:,np.newaxis]

所以,当你想重塑事物(改变大小)时,我会让reshape工作,当你只想添加一个新轴时,让newaxis工作(这样写,似乎很明显)。

7hiiyaii

7hiiyaii4#

你也可以使用transpose:

A = [1,2,3,4,5,6]
np.asarray([A]).T

np.transpose([A])

输出:

array([[1],
        [2],
        [3],
        [4],
        [5],
        [6]])

相关问题