相关文章推荐
安静的黄瓜  ·  JavaFX - akka1 - 博客园·  1 年前    · 
飘逸的酱牛肉  ·  Element - 知乎·  1 年前    · 
爱喝酒的雪糕  ·  javascript - React ...·  1 年前    · 
忧郁的薯片  ·  android camera2 ...·  1 年前    · 

创建一个可变维度的矩阵,然后用python创建一个算法来分配其值

1 人关注

我试图在python中创建一个变量维度为(n+1)x(n+1)的列表,然后在条目中赋值。具体来说,我希望第一行是一个先前定义的列表。创建可变维度矩阵是很容易的。

import numpy as np
def m(n): #m is our nxn matrix
 return np.empty(shape=(n+1,n+1), dtype=float)
for j in range(n+1): #we want to fill the entire 0th row with 2
  m(n)[0][j]=2

想要的输出为n=3。

array([[ 2,  2,  2,  2],
   [-3.,  3.,  0.,  0.],
   [ 3., -6.,  3.,  0.],
   [-1.,  3., -3.,  1.]])

实际产出。

array([[ 3.,  0.,  0.,  0.],
   [-3.,  3.,  0.,  0.],
   [ 3., -6.,  3.,  0.],
   [-1.,  3., -3.,  1.]])

我的最终目标是说。

for j in range(n+1): 
  m(n)[0][j]= list[j]#where list[j] has n+1 entires

就是说,用一个包含n+1个值的列表来填充第0行。我对Python很陌生,所以希望得到任何帮助。

python
William
William
发布于 2022-04-18
1 个回答
Patrick Artner
Patrick Artner
发布于 2022-04-18
已采纳
0 人赞同
for j in range(n+1):
    m(n)[0][j]=2 

将会创建大量的ndarrays并将它们扔掉--你从未将m(n)调用产生的东西存储起来--你创建它,修改它并将它扔掉。

你不需要任何循环或藻类来设置第一行。 我建议使用np.zeros而不是np.empty。- 空会有 "东西 "在里面,零则是空的。

import numpy as np
def m(nnnn): # m is our nxn matrix
    # np.empty does not set any values - start with zeros instead
    return np.zeros(shape=(nnnn+1,nnnn+1), dtype=float)
n = 3
whatever = m(3)
whatever[0,] = 2 # set the first row with values of 2 using indexing
print(whatever)  # 1
# [[1,2,3],[4,5,6],[7,8,9]]
some_3x3 = np.array(range(1,10)).reshape((3,3)) 
# set lower part of your 4x4 with that:
whatever[1:,0:3] = some_3x3 
print(whatever) # 2

To get:

[[2. 2. 2. 2.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[2. 2. 2. 2.] [1. 2. 3. 0.] [4. 5. 6. 0.] [7. 8. 9. 0.]]

With np.empty you'll get something like: