将列表列表中的平面列表添加到固定长度的 numpy 数组中
Adding a flat list from a list of list into a fixed length numpy array
我正在尝试将列表列表中的平面列表添加到固定长度的 numpy 数组中。
import numpy as np
def extract_foo(x):
return x.size
def extract_foo_of_foo(x):
return [x.size for _ in range(18)]
def extract_feats():
input_array = np.ones((36,))
output_matrix = np.empty((36, 22))
for x_idx, x_val in enumerate(input_array):
output_matrix[x_idx] = [
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
# this is where I want to flatten my list
# that one is a list of list containing 22 - 4 = 18 lists
extract_foo_of_foo(x_val)
]
return output_matrix
我尝试了如下列表理解:
[y for y in extract_foo_of_foo(x_val)]
并具有 reduce 功能:
reduce(lambda y: y, extract_foo_of_foo(x_val))
我正在使用 numpy 1.17.4 和 python 3.7.5。有 pythonic 方法来处理这个问题吗?
如果我没有正确理解你的问题,我相信你可以像这样在第二个轴上使用切片索引:
def extract_feats():
input_array = np.ones((36,))
output_matrix = np.empty((36, 22))
for x_idx, x_val in enumerate(input_array):
output_matrix[x_idx, 0:4] = [
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val)
]
output_matrix[x_idx, 4:22] = extract_foo_of_foo(x_val)
return output_matrix
这是输出的形状:
>>> extract_feats().shape
(36, 22)
我正在尝试将列表列表中的平面列表添加到固定长度的 numpy 数组中。
import numpy as np
def extract_foo(x):
return x.size
def extract_foo_of_foo(x):
return [x.size for _ in range(18)]
def extract_feats():
input_array = np.ones((36,))
output_matrix = np.empty((36, 22))
for x_idx, x_val in enumerate(input_array):
output_matrix[x_idx] = [
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
# this is where I want to flatten my list
# that one is a list of list containing 22 - 4 = 18 lists
extract_foo_of_foo(x_val)
]
return output_matrix
我尝试了如下列表理解:
[y for y in extract_foo_of_foo(x_val)]
并具有 reduce 功能:
reduce(lambda y: y, extract_foo_of_foo(x_val))
我正在使用 numpy 1.17.4 和 python 3.7.5。有 pythonic 方法来处理这个问题吗?
如果我没有正确理解你的问题,我相信你可以像这样在第二个轴上使用切片索引:
def extract_feats():
input_array = np.ones((36,))
output_matrix = np.empty((36, 22))
for x_idx, x_val in enumerate(input_array):
output_matrix[x_idx, 0:4] = [
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val),
extract_foo(x_val)
]
output_matrix[x_idx, 4:22] = extract_foo_of_foo(x_val)
return output_matrix
这是输出的形状:
>>> extract_feats().shape
(36, 22)