我们有一个函数f(x,y)。我们想要计算矩阵Bij = f(xi,xj)= f(ih,jh),其中1 <= i,j <= n且h = 1 /(n + 1),例如:
如果f(x,y)= x + y,则Bij = ih + jh,矩阵变为(此处,n = 3):
我想编写一个函数来计算连接Bij所有列的列向量b。例如,在我之前的例子中,我们将:
我完成了,我们可以改变函数和n,这里f(x,y)= x + y:
n=3
def f(i,j):
h=1.0/(n+1)
a=((i+1)*h)+((j+1)*h)
return a
B = np.fromfunction(f,(n,n))
print(B)
但我不知道如何做矢量b。
np.concatenate((B[:,0],B[:,1],B[:,2],B[:,3])
我得到一个线矢量,而不是列矢量。你可以帮帮我吗 ?抱歉我的英语不好,我是Python的初学者。
答案 0 :(得分:1)
ravel
函数和新轴应该可以解决问题:
import numpy as np
x = np.array([[0.5, 0.75, 1],
[0.75, 1, 1.25],
[1, 1.25, 1.5]])
x.T.ravel()[:, np.newaxis]
# array([[ 0.5 ],
# [ 0.75],
# [ 1. ],
# [ 0.75],
# [ 1. ],
# [ 1.25],
# [ 1. ],
# [ 1.25],
# [ 1.5 ]])
拉威尔将所有行拼接在一起,因此我们首先转置矩阵(使用.T
)。结果是行向量,我们通过添加新轴将其更改为列向量。
答案 1 :(得分:1)
import numpy as np
# create sample matrix `m`
m = np.matrix([[0.5, 0.75, 1], [0.75, 1, 1.25], [1, 1.25, 1.5]])
# convert matrix `m` to a 'flat' matrix
m_flat = m.flatten()
print(m_flat)
# `m_flat` is still a matrix, in case you need an array:
m_flat_arr = np.squeeze(np.asarray(m_flat))
print(m_flat_arr)
该代码段使用.flatten()
,.asarray()
和.squeeze()
来转换原始矩阵m
matrix([[ 0.5 , 0.75, 1. ],
[ 0.75, 1. , 1.25],
[ 1. , 1.25, 1.5 ]])
到数组m_flat_arr
:
array([ 0.5 , 0.75, 1. , 0.75, 1. , 1.25, 1. , 1.25, 1.5 ])