【问题标题】:How to access a particular array (after a loop)如何访问特定数组(循环后)
【发布时间】:2019-12-02 07:14:11
【问题描述】:

在运行一个将整个二维数组乘以一个标量的循环后,我想访问循环外的一个特定数组。假设循环产生 20 个数组,出于参数考虑,我想访问第 10 个数组。

我尝试过索引,但这给了我一个数组中的精确值。假设我们有一个数组 A,那么当 i = 1 和 j = 2 时,A[1,2] 将返回 A 内的值。我想检索整个数组。

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0,10,1)

b = np.arange(0,10,1)

X,Y = np.meshgrid(a,b)


print("Below is X")
print(X)

print("Below is Y")
print(Y)


for i in range(len(X)):
    Z = i*X
    print(i)
    print(Z)


#How do I now access the ith Z array outside the loop above?

我希望能够说,“打印 Z 数组”。

【问题讨论】:

  • 有些不清楚。在循环内,您覆盖整个 Z 数组(将其设置为整数)。也许你的意思有点不同。
  • 现在编辑了,不知道为什么我初始化Z然后覆盖它。
  • 现在您在每一步都为 Z 分配一个新的单个值(对于范围内的 i..)
  • 变量 X、Y 和 Z 的形状为 (10, 10),如上用户所说,您的 Z 值是替换,如果您想要 Z 的第一个数组,则使用 Z[0],如果您想要第 0 个数组的特定值使用 Z[0][1] 等等。
  • 我有点困惑,抱歉。每次循环运行时我都会不断替换以前的 Z 值的问题吗?我想将整个 Z 数组乘以标量 i 。如果我做 Z[i] = i * X[i] 那么我所有的 Z 数组都是一样的。我的最终目标是为不同时间制作许多图表

标签: python arrays loops numpy indexing


【解决方案1】:

实际上,您不需要遍历数组的range(len(X)),因为可以通过矢量化处理 numpy 数组。

检查以下代码sn -p:

import numpy as np

a = np.arange(0,10,1)
X,Y = np.meshgrid(a,a)
Z = X*a

print(X)
#    [[0 1 2 3 4 5 6 7 8 9]
#     ...
#     [0 1 2 3 4 5 6 7 8 9]]

print(Y)
#    [[0 0 0 0 0 0 0 0 0 0]
#     ...
#     [9 9 9 9 9 9 9 9 9 9]]

print(Z)
#    [[ 0 1 4 9 16 25 36 49 64 81]
#     ...
#     [ 0 1 4 9 16 25 36 49 64 81]]

print(Z[0])
#     [ 0 1 4 9 16 25 36 49 64 81]

由于您不需要生成 10x10 数组Z,您还可以通过以下方式获取此向量:

print(X[0]*a)
#     [ 0 1 4 9 16 25 36 49 64 81]

【讨论】:

    【解决方案2】:

    如果您想在循环后访问任何第 i 个 Z 数组,建议您创建一个列表并保存所有数组。像这样的:

    Z = []
    for i in range(len(X)):
        Z.append(i*X)
        print(i)
        print(Z)
    
    print(Z[i])

    【讨论】:

      【解决方案3】:

      在循环中附加到numpy 数组效率非常低(二次成本),因为您要为每个append 制作数据的完整副本。因此我们将使用基本的python 列表,然后将其转换为numpy

      i=0
      Z=[]
      while i < len(X):
          Z.append(i*X)
          i+=1
      #     print(i)
      #     print(Z)
      Z = np.asarray(Z)
      

      最后,您只需传递一维索引即可访问子数组:

      Z[3]
      

      【讨论】:

      • 谢谢!是否有理由在 for 循环之前推荐使用 while 循环?
      • 不客气!不,这是有任何理由的。只是使用了不同的循环结构
      猜你喜欢
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2022-07-26
      相关资源
      最近更新 更多