【问题标题】:How to replace all the elements of a numpy array?如何替换numpy数组的所有元素?
【发布时间】:2021-07-30 05:03:30
【问题描述】:

给定一个包含多个数组的 numpy 数组,如何将数组的所有值替换为另一个数组中的值?

例如:

import numpy
first_array = numpy.array([[1,2],[3,4],[5,6],[7,8],[9,10]])

second_array = numpy.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6,
 0.7, 0.8, 0.9, 1])

鉴于这些数组,如何将 1,2 替换为 0.1、0.2 等?

【问题讨论】:

  • first_array = second_array.reshape((5,2)) 是最简单的方法。只要元素总数相同,reshape就行了。
  • 告诉您如何进行替换的规则是什么?在这种情况下,确切的期望结果是什么,它与直接使用second_array 有何不同?
  • @TimRoberts 使用first_array.shape 可能比硬编码(5,2) 更好。 [编辑:我现在看到已经发布了一个答案,正是这样做的。]
  • first_array dtype 是int,所以你不能在里面放浮点数。无论如何,重塑第二个数组更有效。

标签: python arrays numpy


【解决方案1】:

使用np.reshape

# import numpy as np

>>> m
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])

>>> n
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])

>>> n.reshape(m.shape)
array([[0.1, 0.2],
       [0.3, 0.4],
       [0.5, 0.6],
       [0.7, 0.8],
       [0.9, 1. ]])

【讨论】:

    【解决方案2】:
    first_array = np.array([[1,2],[3,4],[5,6],[7,8],[9,10]])
    second_array = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6,0.7, 0.8, 0.9, 1])
    
    np.set_printoptions(formatter={'float':"{0:0.1f}".format})
    first_array = first_array.astype(float)
    
    for i in range(np.shape(first_array)[0]):
        for j in range(np.shape(first_array)[1]):
            first_array[i][j] = second_array[2*i+j]
    
    print(first_array)
    

    输出:

    [[0.1 0.2]
     [0.3 0.4]
     [0.5 0.6]
     [0.7 0.8]
     [0.9 1.0]]
    

    【讨论】:

    • 当然,用另一个数组替换整个数组是愚蠢的,但是如果我故意创建一个np.zeros 数组,然后用另一个计算中的元素逐个元素替换它,我的意思是而不是append 只做元素替换。 (也许提问者只是将问题写成一个带有另一个数组替换的整个数组,但实际上他想要的只是大致了解如何逐个元素替换array[i][j] =
    • 有一场辩论。如果您正在使用 Python 列表,那么从头开始创建一个新列表几乎总是比一个一个替换每个元素要好得多。使用 numpy 数组,它并不总是那么简单,但 reshape 解决方案显然比元素替换要好得多。
    • 你是对的,它几乎总是更好,直到作业明确指出我们需要逐个元素替换(在我的例子中的真实示例:使用1000 个 MonteCarlo 步骤,其中初始数组随时间不断变化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多