Numpy np.阵列子阵的最大值

Numpy np.阵列子阵的最大值,numpy,scipy,Numpy,Scipy,正在尝试为0到j的元素查找行中的最大值 samples=sps.uniform(loc=0, scale=1).rvs(size=(samples_count, size)) estimation=[[0]*300]*500 for i in range(0,500): for j in range(0,300): estimation[i][j]=(samples[i,0:j+1].max()) 估计是这样的 array([[0.81546414, 0.8474682

正在尝试为0到j的元素查找行中的最大值

samples=sps.uniform(loc=0, scale=1).rvs(size=(samples_count, size))
estimation=[[0]*300]*500
for i in range(0,500):
    for j in range(0,300):
        estimation[i][j]=(samples[i,0:j+1].max())
估计是这样的

array([[0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564],
       [0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564],
       [0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564],
       ...,
       [0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564],
       [0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564],
       [0.81546414, 0.84746822, 0.84746822, ..., 0.98916564, 0.98916564,
        0.98916564]])
所有行都是相同的,但是,例如

samples[0,:0+1].max()
0.5407804178869432
我希望[0][0]看起来像这个


那么,行相同的原因是什么呢?

构建估算的方式会创建指向相同300列的500行。只创建一行,然后指向500次。最后看到的是循环最后一次迭代的结果

estimation=[[0]*3]*5
for i in range(0,5):
    for j in range(0,3):
        estimation[i][j]=np.random.randint(10)
    print(estimation)     

# [[5, 7, 1], [5, 7, 1], [5, 7, 1], [5, 7, 1], [5, 7, 1]] Iteration 0
# [[7, 6, 0], [7, 6, 0], [7, 6, 0], [7, 6, 0], [7, 6, 0]] Iteration 1
# [[3, 6, 2], [3, 6, 2], [3, 6, 2], [3, 6, 2], [3, 6, 2]] Iteration 2
# [[5, 8, 7], [5, 8, 7], [5, 8, 7], [5, 8, 7], [5, 8, 7]] Iteration 3
# [[2, 7, 0], [2, 7, 0], [2, 7, 0], [2, 7, 0], [2, 7, 0]] Iteration 4
您可以使用np.zero创建估算(或np.empty)。您可以利用numpy的隐含循环来进一步简化

import numpy as np
import scypi.stats as sps

samples=sps.uniform(loc=0, scale=1).rvs(size=(500, 300))
estimation= np.zeros((500, 300))
for j in range(0,300):
    estimation[i, j]=samples[i,0:j+1].max()
j循环也可以隐藏在numpy中

samples=sps.uniform(loc=0, scale=1).rvs(size=(500, 300))
estimation= np.fmax.accumulate(samples, axis=1)
在最后一个示例中,沿轴1累积应用fmax。这就是j循环所做的