将一维数组转换为二维数组,使得每个元素在结果中都是一行
Convert one-dimensional array to two-dimensional array so that each element is a row in the result
我想知道如何将这个:array([0, 1, 2, 3, 4, 5])
转换成这个:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]])
简而言之,给定一个平面数组,将数组中的每个元素重复n次,这样每个元素都创建一个包含n个相同元素的子数组,并将这些子数组连接成一个,使得每个行包含原始数组中重复 n 次的元素。
我能做到:
def repeat(lst, n):
return [[e]*n for e in lst]
>repeat(range(10), 4)
[[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5],
[6, 6, 6, 6],
[7, 7, 7, 7],
[8, 8, 8, 8],
[9, 9, 9, 9]]
如何在 NumPy 中执行此操作?
您可以像这样使用 numpy 的 repeat
:
np.repeat(range(10), 4).reshape(10,4)
给出:
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]
[8 8 8 8]
[9 9 9 9]]
您可以使用 tile
来处理维度:
a = np.array([0, 1, 2, 3, 4, 5])
N = 4
np.tile(a[:,None], (1, N))
# or
np.tile(a, (N, 1)).T
np.broadcast_to(a, (N, a.shape[0])).T
# or
np.broadcast_to(a[:,None], (a.shape[0], N))
或者乘以一个数组:
a[:,None]*np.ones(N, dtype=a.dtype)
输出:
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5]])
你也可以用这个
import numpy as np
def oned_to_2d(array_length, number_of_value):
data = np.empty([0,number_of_value])
for i in range(0,array_length):
a = np.array(number_of_value*[i])
data = np.append(data, np.array([a]),axis=0)
return data
oned_to_2d(4,4)
输出为
array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])
我想知道如何将这个:array([0, 1, 2, 3, 4, 5])
转换成这个:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5]])
简而言之,给定一个平面数组,将数组中的每个元素重复n次,这样每个元素都创建一个包含n个相同元素的子数组,并将这些子数组连接成一个,使得每个行包含原始数组中重复 n 次的元素。
我能做到:
def repeat(lst, n):
return [[e]*n for e in lst]
>repeat(range(10), 4)
[[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5],
[6, 6, 6, 6],
[7, 7, 7, 7],
[8, 8, 8, 8],
[9, 9, 9, 9]]
如何在 NumPy 中执行此操作?
您可以像这样使用 numpy 的 repeat
:
np.repeat(range(10), 4).reshape(10,4)
给出:
[[0 0 0 0]
[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]
[5 5 5 5]
[6 6 6 6]
[7 7 7 7]
[8 8 8 8]
[9 9 9 9]]
您可以使用 tile
来处理维度:
a = np.array([0, 1, 2, 3, 4, 5])
N = 4
np.tile(a[:,None], (1, N))
# or
np.tile(a, (N, 1)).T
np.broadcast_to(a, (N, a.shape[0])).T
# or
np.broadcast_to(a[:,None], (a.shape[0], N))
或者乘以一个数组:
a[:,None]*np.ones(N, dtype=a.dtype)
输出:
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5]])
你也可以用这个
import numpy as np
def oned_to_2d(array_length, number_of_value):
data = np.empty([0,number_of_value])
for i in range(0,array_length):
a = np.array(number_of_value*[i])
data = np.append(data, np.array([a]),axis=0)
return data
oned_to_2d(4,4)
输出为
array([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[2., 2., 2., 2.],
[3., 3., 3., 3.]])