将向量传递给numpy中的函数输入

aiqt4smr  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(85)

我有以下情况:

import numpy as np

def func(m):
    M = np.zeros((3,3))
    M[1,1] = 2*m
    return M

print(func(2))
print(func([1,2,3]))

字符串
第一个print函数给出了我想要的结果(M中的(1,1)项变为4)。但是第二个给了我ValueError: setting an array element with a sequence.。我想做的是打印3个不同的矩阵,数组[1,2,3]中的每个值都有一个(因此对于3个矩阵,(1,1)项将是2,4和6)。如何有效地做到这一点(即不使用for循环)。谢谢你,谢谢

9rygscc1

9rygscc11#

您是否正在尝试生成3d数组:

In [178]: M = np.zeros((3,3,3),int)

In [179]: M[:,1,1] = np.array([1,2,3])*2

In [180]: M
Out[180]: 
array([[[0, 0, 0],
        [0, 2, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 4, 0],
        [0, 0, 0]],

       [[0, 0, 0],
        [0, 6, 0],
        [0, 0, 0]]])

字符串
如果你想要3个数组,你可以在第一个维度上分割,例如。list(M)。三个不同的数组总是需要python级别的迭代。
回复我的评论,小心列表乘法

In [181]: 2*[1,2,3]
Out[181]: [1, 2, 3, 1, 2, 3]


将列表馈送到函数并不“自动”对列表的元素执行迭代。如果你给一个数组赋值也是这样。
列表解析解决方案:

In [183]: [func(i) for i in [1,2,3]]
Out[183]: 
[array([[0., 0., 0.],
        [0., 2., 0.],
        [0., 0., 0.]]),
 array([[0., 0., 0.],
        [0., 4., 0.],
        [0., 0., 0.]]),
 array([[0., 0., 0.],
        [0., 6., 0.],
        [0., 0., 0.]])]

相关问题