簡體   English   中英

將一維NumPy數組的值重復“ N”次

[英]Repeat values an a 1D NumPy array “N” times

我有以下數組:

[9.975 9.976 9.977 9.978 9.979 9.98  9.981 9.982 9.983 9.984 9.985 9.986
9.987 9.988 9.989 9.99  9.991 9.992 9.993 9.994]

現在,我想將這些值復制到同一行的n列中。 結果應如下所示:

[[9.975 9.975 9.975],
 [9.976 9.976 9.976],
 ..... 
 [9.994 9.994 9.994]]

你知道這怎么可能嗎?

提前致謝。

由於您使用的是numpy,請使用np.repeat + np.reshape

>>> np.repeat(arr, 3).reshape(-1, 3)
array([[9.975, 9.975, 9.975],
       [9.976, 9.976, 9.976],
       [9.977, 9.977, 9.977],
       [9.978, 9.978, 9.978],
       [9.979, 9.979, 9.979],
       [9.98 , 9.98 , 9.98 ],
       [9.981, 9.981, 9.981],
       [9.982, 9.982, 9.982],
       [9.983, 9.983, 9.983],
       [9.984, 9.984, 9.984],
       [9.985, 9.985, 9.985],
       [9.986, 9.986, 9.986],
       [9.987, 9.987, 9.987],
       [9.988, 9.988, 9.988],
       [9.989, 9.989, 9.989],
       [9.99 , 9.99 , 9.99 ],
       [9.991, 9.991, 9.991],
       [9.992, 9.992, 9.992],
       [9.993, 9.993, 9.993],
       [9.994, 9.994, 9.994]])

嘗試這個:

a = [ 9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981,
      9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988,
      9.989, 9.99,  9.991, 9.992, 9.993, 9.994 ]
n = 3
print([[x] * n for x in a])

我從您的示例輸出中得出此答案。 您的措詞並沒有明確說明您想要什么。

如果您使用的是numpy ,那么我建議采用以下解決方案:

a = np.array([ 9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981,
               9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988,
               9.989, 9.99,  9.991, 9.992, 9.993, 9.994 ])
print(np.array([ a ] * 3).transpose())

使用for循環

lst = [9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994]
rslt = []
n = 3
for i in lst:
    rslt.append([i for j in range(n)])

編輯:使它變得更pythonic,雖然可讀性稍差:

lst = [9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994]
n = 3
rslt = [[i for j in range(n)] for i in lst]

我們可以運行for循環並將數字存儲到空列表中。 然后,我們可以獲取該空列表,然后將其轉換為數組,以獲取所需的輸出。 這是一個例子:

import numpy as np



array = np.array([9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986,
                  9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994])
empty_list = []

for number in array:
    num1 = float(number)
    num2 = float(number)
    num3 = float(number)
    empty_list.append(num1)
    empty_list.append(num2)
    empty_list.append(num3)

array = np.array(empty_list).reshape(20, 3)
print(array)

這是您的輸出:

[[ 9.975  9.975  9.975]
 [ 9.976  9.976  9.976]
 [ 9.977  9.977  9.977]
 [ 9.978  9.978  9.978]
 [ 9.979  9.979  9.979]
 [ 9.98   9.98   9.98 ]
 [ 9.981  9.981  9.981]
 [ 9.982  9.982  9.982]
 [ 9.983  9.983  9.983]
 [ 9.984  9.984  9.984]
 [ 9.985  9.985  9.985]
 [ 9.986  9.986  9.986]
 [ 9.987  9.987  9.987]
 [ 9.988  9.988  9.988]
 [ 9.989  9.989  9.989]
 [ 9.99   9.99   9.99 ]
 [ 9.991  9.991  9.991]
 [ 9.992  9.992  9.992]
 [ 9.993  9.993  9.993]
 [ 9.994  9.994  9.994]]

簡而言之,我們僅對每個數字運行一個for循環,將其存儲三遍到空列表中,創建一個數組,對其進行整形,然后獲得您要查找的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM