【问题标题】:How to set first column to a constant value of an empty np.zeros numPy matrix? [duplicate]如何将第一列设置为空 np.zeros numPy 矩阵的常量值? [复制]
【发布时间】:2015-09-08 11:46:56
【问题描述】:

我正在为地下水位模型设置一些边界条件,我可以将整个第一行设置为一个恒定值,但不能将整个第一列设置为一个常数值。我正在使用np.zeros((11, 1001)) 制作一个空矩阵。有谁知道为什么我成功定义了第一行,而不是第一列?我已经注意到下面的问题。

import numpy as np

x = range(0, 110, 10)
time = range(0, 5005, 5)
xSize = len(x)
timeSize = len(time)

dx = 10
dt = 5
Sy = 0.1
k = 0.002

head = np.zeros((11, 1001))

head[0:][0] = 16 # sets the first row to 16
head[0][0:] = 16 # DOESN'T set the first column to 16

for t in time:
    for i in x[1:len(x)-1]:
        head[t+1][i] = head[t][i] + ((dt*k)/(2*Sy)) * (((head[t][i-1]**2) - (2*head[t][i]**2) + (head[t][i+1]**2)) / (dx**2))

【问题讨论】:

    标签: python numpy matrix modeling


    【解决方案1】:

    你要做的就是改变

    head[0][0:]
    

    head[:, 0] = 16
    

    如果你想改变第一行,你可以这样做:

    head[0, :] = 16
    

    编辑:

    以防万一您还想知道如何更改任意行/列中任意数量的值:

    myArray = np.zeros((6, 6))
    

    现在我们将第 2 行的 3 个值设置为 16:

    myArray[2, 1:4] = 16.
    array([[  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,  16.,  16.,  16.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.]])
    

    列也一样:

    myArray[2:5, 4] = -4.
    array([[  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,  16.,  16.,  16.,  -4.,   0.],
           [  0.,   0.,   0.,   0.,  -4.,   0.],
           [  0.,   0.,   0.,   0.,  -4.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.]])
    

    如果您还想更改某些值,例如两个不同的行你可以这样做:

    myArray[[0, 5], 0:3] = 10.
    array([[ 10.,  10.,  10.,   0.,   0.,   0.],
           [  0.,   0.,   0.,   0.,   0.,   0.],
           [  0.,  16.,  16.,  16.,  -4.,   0.],
           [  0.,   0.,   0.,   0.,  -4.,   0.],
           [  0.,   0.,   0.,   0.,  -4.,   0.],
           [ 10.,  10.,  10.,   0.,   0.,   0.]])
    

    【讨论】:

    • @Nitish 谢谢大家!
    【解决方案2】:

    您可以使用类似的语法。

    In [12]: head = np.zeros((11,101))
    
    In [13]: head
    Out[13]:
    array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           ...,
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.]])
    
    In [14]: head[:,0] = 42.0
    
    In [15]: head
    Out[15]:
    array([[ 42.,   0.,   0., ...,   0.,   0.,   0.],
           [ 42.,   0.,   0., ...,   0.,   0.,   0.],
           [ 42.,   0.,   0., ...,   0.,   0.,   0.],
           ...,
           [ 42.,   0.,   0., ...,   0.,   0.,   0.],
           [ 42.,   0.,   0., ...,   0.,   0.,   0.],
           [ 42.,   0.,   0., ...,   0.,   0.,   0.]])
    

    【讨论】:

      猜你喜欢
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 2015-05-25
      • 2016-11-05
      • 2015-12-26
      • 1970-01-01
      相关资源
      最近更新 更多