【发布时间】:2018-04-13 22:01:58
【问题描述】:
假设我有一个 numpy 数组列表。如何重塑列表中的数组?
这是一个示例,我想确保我的所有数组都有两个维度:
In [0]: import numpy as np
...: arr1 = np.array([1, 2, 3]) # Shape is (3,) --> Will need reshaping
...: arr2 = np.array([[1, 2, 3]]) # Shape is (1, 3) --> Shape ok
...: list_of_arrays = [arr1, arr2]
...: for i, arr in enumerate(list_of_arrays):
...: print("\narray number {}, initial shape: {}".format(i, arr.shape))
...: if len(arr.shape)==1:
...: print("needs reshaping")
...: arr = np.reshape(arr, (1, arr.shape[0]))
...: print("new shape: {}".format(arr.shape))
...: else:
...: print("shape ok")
按预期打印出来:
array number 0, initial shape: (3,)
needs reshaping
new shape: (1, 3)
array number 1, initial shape: (1, 3)
shape ok
但是,结果被强制转换为arr,而不是我真正要修改的数组,arr1:
In [1]: arr1.shape
Out[1]: (3,)
如何将结果转换为arr1?
请注意,我需要修改列表中的元素,而不是列表本身。换句话说,我希望能够直接修改arr1:它将作为arr1 的参数传递,而不是list_of_arrays[0]。
【问题讨论】:
-
结果被转换为
arr,而不是你真正想要重塑的数组。 -
没错。那么如何转换到我真正想要重塑的数组呢?我将更改我的文字以反映此评论。
-
list_of_arrays = list(map(np.atleast_2d, list_of_arrays))是一个选项 :) 例如显式映射结果。当然,如果想要的维度不同,也可以使用 lambda 函数代替 np.atleast_2d 来达到想要的结果。 -
我需要修改列表中的元素,而不是列表本身。换句话说,我希望能够直接修改
arr1:它将作为arr1的参数传递,而不是list_of_arrays[0]。编辑问题以使其更清楚。 -
如果参数是临时的
arr,又不想将其转换回来,为什么不直接将它传递给你想在for循环中使用它执行的函数呢?
标签: python numpy iterator reshape