gpt4 book ai didi

python - numpy,将一个数组映射到另一个数组的一部分

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:59 26 4
gpt4 key购买 nike

假设我有一个数组

    a = numpy.arange(8*6*3).reshape((8, 6, 3))
#and another:
l = numpy.array([[0,0],[0,1],[1,1]]) #an array of indexes to array "a"
#and yet another:
b = numpy.array([[0,0,5],[0,1,0],[1,1,3]])

其中“l”和“b”的长度相等,我想说

    a[l] = b

这样 a[0][0] 变成 [0,0,5],a[0][1] 变成 [0,1,0] 等等

当我得到一维数组时它似乎工作正常,但它给了我错误

    ValueError: array is not broadcastable to correct shape

当我尝试使用 3 维数组时。

最佳答案

import numpy as np

a = np.arange(8*6*3).reshape((8, 6, 3))
l = np.array([[0,0],[0,1],[1,1]]) #an array of indexes to array "a"
b = np.array([[0,0,5],[0,1,0],[1,1,3]])

a[tuple(l.T)] = b
print(a[0,0])
# [0 0 5]

print(a[0,1])
# [0 1 0]

print(a[1,1])
# [1 1 3]

Anne Archibald says ,

When you are supplying arrays in all index slots, what you get back has the same shape as the arrays you put in; so if you supply one-dimensional lists, like

A[[1,2,3],[1,4,5],[7,6,2]]

what you get is

[A[1,1,7], A[2,4,6], A[3,5,2]]

当你将它与你的例子进行比较时,你会看到

a[l] = b 告诉 NumPy 设置

a[0,0,1] = [0,0,5]
a[0,1,1] = [0,1,0]

并保留 b 的第三个元素未分配。这就是你得到错误的原因

ValueError: array is not broadcastable to correct shape

解决方案是将数组 l 转置为正确的形状:

In [50]: tuple(l.T)
Out[50]: (array([0, 0, 1]), array([0, 1, 1]))

(您也可以使用 zip(*l),但是 tuple(l.T) 会更快一些。)

关于python - numpy,将一个数组映射到另一个数组的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11071490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com