python - reshape numpy 数组的列表,然后 reshape 回来

标签 python arrays numpy

我有一个列表,其中包含几个不同形状的 numpy 数组。 我想将这个数组列表 reshape 为一个 numpy 向量,然后更改向量中的每个元素,然后将其 reshape 回原始数组列表。

例如:

输入

[numpy.zeros((2,2)), numpy.ones((3,3))]
  • 首先

到矢量

[0,0,0,0,1,1,1,1,1,1,1,1,1]
  • 第二

每次只改变一个元素。例如将第一个元素 0 更改为 2

[0,2,0,0,1,1,1,1,1,1,1,1,1]
  • 最后

将其转换回

[array([[0,2],[0,0]]),array([[1,1,1],[1,1,1],[1,1,1]])]

有没有快速实现的?非常感谢。

最佳答案

似乎转换为列表并返回是低效的。相反,为什么不弄清楚要索引哪个数组(以及在哪里)然后只更新该索引呢?例如

def change_element(arr1, arr2, ix, value):
    which = ix >= arr1.size
    arr = [arr1, arr2][which]
    ix = ix - arr1.size if which else ix
    arr.ravel()[ix] = value

下面是一些示例用法:

>>> arr1 = np.zeros((2, 2))
>>> arr2 = np.ones((3, 3))
>>> change_element(arr1, arr2, 1, 2)
>>> change_element(arr1, arr2, 6, 3.14)
>>> arr1
array([[ 0.,  2.],
       [ 0.,  0.]])
>>> arr2
array([[ 1.  ,  1.  ,  3.14],
       [ 1.  ,  1.  ,  1.  ],
       [ 1.  ,  1.  ,  1.  ]])
>>> change_element(arr1, arr2, 7, 3.14)
>>> arr1
array([[ 0.,  2.],
       [ 0.,  0.]])
>>> arr2
array([[ 1.  ,  1.  ,  3.14],
       [ 3.14,  1.  ,  1.  ],
       [ 1.  ,  1.  ,  1.  ]])

一些注意事项——这会更新数组。它不会创建新数组。如果你真的需要创建新数组,我想你可以 np.copy 它们并返回。此外,这依赖于数组在 ravel 之前和之后共享内存。我不记得 ravel 返回新数组而不是原始数组 View 的确切情况。 . .


泛化到更多数组实际上很容易。我们只需要遍历数组列表,看看 ix 是否小于数组大小。如果是,我们就找到了我们的数组。如果不是,我们需要从 ix 中减去数组的大小,以表示到目前为止我们已经遍历的元素数:

def change_element(arrays, ix, value):
    for arr in arrays:
        if ix < arr.size:
            arr.ravel()[ix] = value
            return
        ix -= arr.size

你可以像以前一样调用它:

change_element([arr1, arr2], 6, 3.14159)

关于python - reshape numpy 数组的列表,然后 reshape 回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33645566/

相关文章:

python - 使用 gdb pretty-print 在 eclipse cdt 中显示智能指针

c - 段错误错误,将元素分配给字符数组

c - scanf 更改其他字符串的值

python - 如何计算numpy中的连续数字

python - 仅将 Gamma 分布拟合到样本的子集

python - 不和谐.ext.commands.errors.CommandInvokeError : Command raised an exception: UnpicklingError: invalid load key, 'H'

python - 在爬虫scrapy中给出输出文件名

python - 使用 jwt_required 添加资源?

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

python - 数据类型列表中的字段名称?