Numpy如何用另一个向量分配矩阵列的值?

2024-04-25 16:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个空的3x2矩阵,然后将每列替换为随机生成的向量

因此,我尝试运行以下代码:


import numpy as np

A = np.empty(shape=(3,2))

x1 = np.random.rand(3,1)
x2 = np.random.rand(3,1)

A[:,1] = x1
A[:,2] = x2

但是,当我尝试运行代码时,收到以下错误消息:


    A[:,1] = x1

ValueError: could not broadcast input array from shape (3,1) into shape (3)

我如何修复错误

多谢各位


Tags: 代码importnumpy消息as错误np矩阵
2条回答
  • A的大小为3 X 2,即它有3行和2
  • A[:,1]表示A的所有行和第二列。数组在python中索引为0
  • A[:,1]是一个列向量,因此可以将大小为3的任何向量指定给它
  • np.random.rand(3,1)返回numpy数组(矩阵)或大小3 X 1。但是你想要的是一个向量,即np.random.rand(3)
A = np.empty(shape=(3,2))

x1 = np.random.rand(3)
x2 = np.random.rand(3)

A[:,0] = x1
A[:,1] = x2

这里有几件事不对。首先,您尝试将更高维数组分配给切片:

A[:,0].shape
# (3,)

x1.shape
#(3, 1)

另一方面,您错误地建立了索引,numpy(以及更一般的python)中的索引从位置0开始。因此,考虑到这些方面,您可以指定为:

A = np.empty(shape=(3,2))

x1 = np.random.rand(3,1)
x2 = np.random.rand(3,1)

A[:,0] = x1.ravel()
A[:,1] = x2.ravel()

A
array([[0.2331048 , 0.2974727 ],
       [0.6789782 , 0.9680256 ],
       [0.0151457 , 0.05476883]])

或者请注意np.random.rand可以生成多维数组:

np.random.rand(3,2)
array([[0.10108146, 0.14859229],
       [0.55174044, 0.7399697 ],
       [0.38104021, 0.32287851]])
​

相关问题 更多 >