You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用numpy.repeat实现R脚本的重复值生成,解决数组报错

R转Python脚本问题解决

需求与问题

需要将以下R脚本转换为Python代码,同时解决转换过程中遇到的警告和错误:

原R脚本

# set value for k
k <- 3

# script 1 R
cnt <- c(1,-1, rep(0,k-2))
print(cnt)
# 输出:1 -1  0

# script 2 R
for (i in 2:(k-1)) {
  cnt <- c(cnt, c(rep(0,(i-1)),1,-1,rep(0,(k-i-1))))
}
print(cnt)
# 输出:1 -1  0  0  1 -1

尝试的Python代码及问题

  1. 第一个脚本的尝试代码(出现DeprecationWarning):
import numpy as np

k = 3
# code 1 Python
pcnt = np.array([1, -1, np.repeat('0', k-2)], dtype=int)
print(pcnt)
# 输出:[ 1 -1  0],但有DeprecationWarning
  1. 第二个脚本的尝试代码(出现ValueError,改dtype='object'结果不符合预期):
import numpy as np

k = 3
# code 2 Python
for i in range(2, k-1+1):
    pcnt2 = np.array([np.repeat(0, (i-1)), 1, -1, np.repeat(0, (k-i-1))], dtype='int')
print(pcnt2)

需要得到两个正确数组:第一个为[1,-1,0],第二个为[0,1,-1](或完整复现R脚本2的拼接结果)。


解决方案

1. 解决第一个脚本的DeprecationWarning

问题根源:将np.repeat返回的数组与标量直接放入np.array(),会创建嵌套数组,强制转换类型时触发警告。正确做法是用np.concatenate(或np.hstack)将所有部分合并为一维数组:

import numpy as np

k = 3
# 正确实现script 1
pcnt = np.concatenate([[1, -1], np.repeat(0, k-2)])
print(pcnt)
# 输出:array([ 1, -1,  0])

也可以用更直观的方式初始化数组后赋值:

pcnt = np.zeros(k, dtype=int)
pcnt[0] = 1
pcnt[1] = -1
print(pcnt)
# 输出:array([ 1, -1,  0])

2. 解决第二个脚本的ValueError并得到正确结果

问题根源:np.array()无法直接将数组和标量混合创建一维数组,需用np.concatenate拼接所有片段:

若仅需生成循环中的单个片段(即[0,1,-1]):

import numpy as np

k = 3
for i in range(2, k):  # range(2, k-1+1)等价于range(2,3)
    pcnt2 = np.concatenate([
        np.repeat(0, i-1),
        [1, -1],
        np.repeat(0, k - i - 1)
    ])
print(pcnt2)
# 输出:array([0, 1, -1])

若需完整复现R脚本2的拼接逻辑(得到[1,-1,0,0,1,-1]):

import numpy as np

k = 3
# 初始化第一个脚本的结果
pcnt = np.concatenate([[1, -1], np.repeat(0, k-2)])
# 执行循环拼接
for i in range(2, k):
    new_segment = np.concatenate([
        np.repeat(0, i-1),
        [1, -1],
        np.repeat(0, k - i - 1)
    ])
    pcnt = np.concatenate([pcnt, new_segment])
print(pcnt)
# 输出:array([ 1, -1,  0,  0,  1, -1])

内容的提问来源于stack exchange,提问作者GSA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:45:43