从函数创建的矩阵,以及矩阵

时间:2017-12-14 22:21:17

标签: python numpy math

我们有一个函数f(x,y)。我们想要计算矩阵Bij = f(xi,xj)= f(ih,jh),其中1 <= i,j <= n且h = 1 /(n + 1),例如:

enter image description here

如果f(x,y)= x + y,则Bij = ih + jh,矩阵变为(此处,n = 3):

enter image description here

我想编写一个函数来计算连接Bij所有列的列向量b。例如,在我之前的例子中,我们将:

enter image description here

我完成了,我们可以改变函数和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的初学者。

2 个答案:

答案 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 ])