Python 从列表的ndarray转换为ndarray

Python 从列表的ndarray转换为ndarray,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,从列表的2d ndarray到3d ndarray的转换,我有一个.npy文件,它是由类似于下面的代码创建的。如何从(2,2)转换为(2,2,3)ndarray? 结果对象已存在,下面的代码无法更改,请从 (2,2)resultsndarrayinto(2,2,3)是我需要的 dtypes = [('value_model', np.float64), ('value_simulator', np.float64), ('vector_optimum', o

从列表的2d ndarray到3d ndarray的转换,我有一个.npy文件,它是由类似于下面的代码创建的。如何从(2,2)转换为(2,2,3)ndarray?
结果
对象已存在,下面的代码无法更改,请从 (2,2)
results
ndarray
into(2,2,3)是我需要的

dtypes = [('value_model', np.float64),
         ('value_simulator', np.float64), 
         ('vector_optimum', object)]

results = np.zeros((2,2), dtype = dtypes) 

for i in range(2):
    for j in range(2):
        results['vector_optimum'][i, j] = list(range(1+i+2*j,4+i+2*j))

print(results['vector_optimum'])
"""
[[list([1, 2, 3]) list([3, 4, 5])]
 [list([2, 3, 4]) list([4, 5, 6])]]
"""
results['vector_optimum'].shape
#Out[4]: (2, 2)   

如何将结果['vector_Optimal']从(2,2)转换为(2,2,3)ndarray?

尝试以下代码

results = results.reshape((results.shape[0], results.shape[1], 1))
results.shape
输出:

(2, 2, 1)

请尝试下面的代码

results = results.reshape((results.shape[0], results.shape[1], 1))
results.shape
输出:

(2, 2, 1)

如果必须在构建对象时保留
结果
对象,最简单的方法可能是创建一个
(2,2,3)
矩阵,称为
新结果
,并将其填充到循环中。然后,如果需要,可以将
结果
重新分配给该
新结果
值。像这样:

dtypes = [('value_model', np.float64),
         ('value_simulator', np.float64),
         ('vector_optimum', object)]

results = np.zeros((2,2), dtype = dtypes)

for i in range(2):
    for j in range(2):
        results['vector_optimum'][i, j] = list(range(1+i+2*j,4+i+2*j))

print(results['vector_optimum'])
"""
[[list([1, 2, 3]) list([3, 4, 5])]
 [list([2, 3, 4]) list([4, 5, 6])]]
"""
results['vector_optimum'].shape
#Out[4]: (2, 2)

# JUST ADD THIS BIT

new_results = np.zeros((2, 2, 3), dtype=dtypes)

for i in range(new_results.shape[0]):
    for j in range(new_results.shape[1]):
        for k in range(new_results.shape[2]):
            new_results["vector_optimum"][i][j][k] = results[i][j][-1][k]

results = new_results


print(results["vector_optimum"][0][0][0])  # prints "1"


如果必须在构建对象时保留
结果
对象,最简单的方法可能是创建一个
(2,2,3)
矩阵,称为
新结果
,并将其填充到循环中。然后,如果需要,可以将
结果
重新分配给该
新结果
值。像这样:

dtypes = [('value_model', np.float64),
         ('value_simulator', np.float64),
         ('vector_optimum', object)]

results = np.zeros((2,2), dtype = dtypes)

for i in range(2):
    for j in range(2):
        results['vector_optimum'][i, j] = list(range(1+i+2*j,4+i+2*j))

print(results['vector_optimum'])
"""
[[list([1, 2, 3]) list([3, 4, 5])]
 [list([2, 3, 4]) list([4, 5, 6])]]
"""
results['vector_optimum'].shape
#Out[4]: (2, 2)

# JUST ADD THIS BIT

new_results = np.zeros((2, 2, 3), dtype=dtypes)

for i in range(new_results.shape[0]):
    for j in range(new_results.shape[1]):
        for k in range(new_results.shape[2]):
            new_results["vector_optimum"][i][j][k] = results[i][j][-1][k]

results = new_results


print(results["vector_optimum"][0][0][0])  # prints "1"


第三维度应该是3,而不是1答案在正确的轨道上,但是
resize
更适合OP用例<代码>重塑只能“洗牌”形状,因此它可以将(2,2)变成(2,1,1)。例如,第三维度应该是3,而不是1答案正确,但是
调整大小
更适合OP用例<代码>重塑只能“洗牌”形状,因此它可以将(2,2)变成(2,1,1)。是的,你是对的,但是
结果
已经存在。我从.npy文件加载它,并且必须将其转换为有用的内容。确定我编辑了我的答案。希望它能满足您的需要。如果这回答了您的问题,请接受答案:)现在,因为您已经修改了我发布的代码,最终的
结果
对象就是您必须操作的对象。我不明白您的意思。是的,您是对的,但是,
results
已经存在,我从.npy文件加载它,并且必须将它转换成有用的东西好的,我编辑了我的答案。希望它符合您的需要。如果这回答了您的问题,请接受答案:)现在,因为您已经修改了我发布的代码,最终的
results
对象就是您必须操作的对象。我不明白您的意思。(2,2,3)数组的值是(2,2)数组的3倍。新的价值观应该是什么?0秒?原作的复制品?还有别的吗?这不仅仅是“转化”或“重塑”的问题;(2,2,3)数组的值是(2,2)数组的3倍。新的价值观应该是什么?0秒?原作的复制品?还有别的吗?这不仅仅是“转化”或“重塑”的问题;这是关于制作“新”数据的。