小编Joh*_*man的帖子

VBE中的ReplaceLine方法仅替换部分行

在回答这个问题时,我认为编写一个能自动替换外观的VBE宏会很有趣

DimAll a, b, c, d As Integer
Run Code Online (Sandbox Code Playgroud)

通过

Dim a As Integer, b As Integer, c As Integer, d As Integer
Run Code Online (Sandbox Code Playgroud)

在我的初稿中,我只想修改一个选定的行.在建立了适当的参考资料以获得VBE对象模型(参见http://www.cpearson.com/excel/vbe.aspx)并玩了一下之后我想出了:

Function ExpandDim(codeLine As String) As String
    Dim fragments As Variant
    Dim i As Long, n As Long, myType As String
    Dim last As Variant
    Dim expanded As String

    If UCase(codeLine) Like "*DIMALL*AS*" Then
        codeLine = Replace(codeLine, "dimall", "Dim", , , vbTextCompare)
        fragments = Split(codeLine, ",")
        n = UBound(fragments)
        last = Split(Trim(fragments(n)))
        myType = …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba vbe

5
推荐指数
1
解决办法
649
查看次数

非 VBA 递归阶乘函数?

是否可以通过启用循环引用(enable iterative calculation在 的Formulas部分中选择Excel Options),在 Excel 中创建递归阶乘函数?我FACT()当然知道并且我不是在寻找一种计算阶乘的实用方法。相反,我的目标是找到一种方法来利用循环引用作为在 Excel 中创建和使用递归函数的通用工具,阶乘提供了一个有趣的测试用例。

使用 Jan Karel Pietrse网站上的一个想法,我能够接近,但结果函数取决于两个单元格而不仅仅是一个单元格,因此它不能解决问题。在

在此处输入图片说明

我使用顶行中的字符串创建了命名范围。在现在命名的单元格中,factorial我输入:

=IF(initializing,1,IF(factor=0,factorial,factorial*factor))
Run Code Online (Sandbox Code Playgroud)

factor我输入的单元格中:

=IF(initializing,n,IF(factor=0,factor,factor-1))
Run Code Online (Sandbox Code Playgroud)

上图显示了 whenn = 10和 的样子initializing = True。公式factorial对应于函数式编程中的标准技巧,通过引入具有累加参数的辅助函数来使递归函数尾调用递归。问题是需要调用辅助函数,阶乘中的公式在某种意义上既是函数本身又是它的辅助函数,其内容是initializing确定当前扮演什么角色。

我的工作原理是,如果我将 的值initializing从 True切换(例如删除它),那么 的值将factorial成为正确的阶乘:

在此处输入图片说明

可以initializing从图片中删除吗?是否可以修改设置,以便例如n更改为 5 然后factorial立即更改为 120,而无需先设置然后更改其他一些单元格?我尝试了几种不同的方法,但最终还是使用 2 步而不是 1 步函数。也许一些涉及数组公式的魔法?

excel recursion excel-formula

5
推荐指数
1
解决办法
4450
查看次数

查找最大数量为1的2D数组的连续行

我有2D数组大小m*m,元素值为0或1.此外,阵列的每列具有1s的连续块(​​在该块外部为0).数组本身太大而无法保存在内存中(多达10 ^ 6行),但对于每列,我可以确定该列中1的下限a和上限b.对于给定的n,我需要找出n最大数量为1的连续行.通过逐个计算每一行的总和,然后选择n其总和最大的连续行,我可以轻松地为较小的数字执行此操作,但对于大数字,它会消耗太多时间.有没有有效的计算方法?也许使用动态编程?

下面是一个示例代码片段,显示了我当前的方法,其中连续调用read_int()(此处未给出)提供连续列的下限和上限:

   long int harr[10000]={0};       //initialized to zero
   for(int i=0;i<m;i++)
    {
        a=read_int();
        b=read_int();
        for(int j=a;j<=b;j++)        // for finding sum of each row
           harr[j]++;
    }
   answer=0;
    for(int i=0;i<n;i++)
    {
        answer=answer+harr[i];
    }
    current=answer;
    for(int i=n;i<m;i++)
    {
        current=current+harr[i]-harr[i-n];
        if(current>answer)
        {
            answer=current;
        }
    }
Run Code Online (Sandbox Code Playgroud)

例如(m= = 6和n= 3)

在此输入图像描述

这里的答案是第1行到第3行,这些行中的总计1计数为13.(第2行到第4行也最大化了总和,因为存在平局.)

c arrays dynamic-programming

5
推荐指数
1
解决办法
1079
查看次数

生成具有固定和和约束的随机整数

如何生成6个随机整数,它们的总和为8,每个整数均小于或等于2?

例如。1,2,1,2,2,0

到目前为止,我已经找到了给出具有固定总和的随机整数,但是如何对这些整数施加约束的方法。

random

5
推荐指数
1
解决办法
1267
查看次数

如何理解RNG种子过多造成的自相关?

为了回答这个问题,我运行了以下VBA实验:

Sub Test()
    Dim i As Long, A As Variant
    Dim count1 As Long, count2 As Long
    ReDim A(1 To 10000)

    For i = 1 To 10000
        Randomize
        A(i) = IIf(Rnd() < 0.5, 0, 1)
    Next i

    'count how often A(i) = A(i+1)
    For i = 1 To 9999
        If A(i) = A(i + 1) Then count1 = count1 + 1
    Next i

    For i = 1 To 10000
        A(i) = IIf(Rnd() < 0.5, 0, 1)
    Next i …
Run Code Online (Sandbox Code Playgroud)

random vba

5
推荐指数
1
解决办法
165
查看次数

决定哪些字符列应转换为因子的标准

我一直在研究Marchi和Albert的"用R分析棒球数据"这本书,我想知道他们没有解决的问题.

我需要导入的许多数据集相当大(尽管在"大数据"意义上并不是真正的"大").例如,Retrosheet游戏日志每年有1个csv文件,可追溯到1871年,其中每个文件对于当年玩的每个游戏都有一行,以及161列.当我read.csv()使用stringsAsFactors完全默认设置将其读入数据帧时,161列中的75个成为因子.其中一些列在概念上是因素(例如包含"D""N"用于白天或夜晚的游戏)但其他列可能更好地保留为字符串(许多列包含起始投手,闭门器等的名称)我知道如何转换列字符串的因素,反之亦然,但我不想扫描161列,明确决定其中的75列.

我认为重要的原因是我注意到,在概念上,通过对这些游戏日志进行子集化获得的小数据帧非常大,因为需要保留全部因子信息.例如,假设GL2016从下载,解压缩和文件中的读取获得的数据帧object.size(GL2016)大约是2.8 MB,当我使用时:

df <- with(GL2016,GL2016[V7 == "CLE" & V13 == "D",])
Run Code Online (Sandbox Code Playgroud)

为了提取2016年克利夫兰印第安人队的主场比赛,我获得了26排的df.26/2428(其中2428是整个数据帧中的行数)略大于1%,但object.size(df)大约是1.3 MB,远远超过大小的1%GL2016.

我想出了一个临时解决方案.我首先定义了一个函数:

big.factor <- function(v,k){is.factor(v) && length(levels(v)) > k}
Run Code Online (Sandbox Code Playgroud)

然后mutate_ifdplyr这样使用:

GL2016 %>% mutate_if(function(v){big.factor(v,30)},as.character) -> GL2016
Run Code Online (Sandbox Code Playgroud)

30是MLB中的球队数量,我有点随意决定任何超过30个等级的因素应该被视为一个字符串.

在运行此代码之后,因子变量的数量已从75减少到12.它的工作原理即使现在GL2016大约为3.2 MB(比之前略大),如果我现在将数据帧子集化以拉出克利夫兰日游戏,结果数据帧只有0.1 MB.

问题:

1)在导入大型数据集时,决定将哪些字符列转换为因子时,哪些标准(希望不如我上面所使用的那么简单)是相关的?

2)我知道将所有字符数据转换为因子的内存占用成本,但是当我将大部分这些因素转换回字符串时,我是否会产生任何隐藏成本(例如处理时间)?

r

5
推荐指数
1
解决办法
64
查看次数

VBA - 创建空数组

我有一个函数,它接受一个字符串数组并将每个字符串映射到一个Date实例。该函数归结为以下代码。

Private Function ParseDates(dates() As String) As Date()
  Dim res() As Date
  Dim i As Integer

  If UBound(dates) >= 0 Then
    ReDim res(UBound(dates)) As Date
  End If


  For i = LBound(dates) To UBound(dates)
    res(i) = #01/01/2000#
  Next i
  ParseDates = res
End Function
Run Code Online (Sandbox Code Playgroud)

只要参数datesnonempty ,该函数就可以正常工作。当dates为空时res不给定维度。因此,如果在循环中枚举结果,则返回值不可枚举,导致此函数的用户崩溃。

parsedDates = ParseDates(input) 
For i = 1 To UBound(parsedDates) ' Suscription out of range
  ...
Run Code Online (Sandbox Code Playgroud)

当日期为空时,如何实例化并返回一个空数组?

如果你打电话,Split("",".")你会收到一个类型为 的对象String(0 to -1)。我需要我的函数返回一个类型的对象,Date(0 …

arrays vba

5
推荐指数
1
解决办法
1万
查看次数

您可以在lambda中分配变量吗?

我当时使用一条lambda语句执行数学运算,并且碰巧反复使用一个特定值。因此,我想知道是否可以在lambda语句中分配和使用变量。

我已经尝试过类似的事情:

a = lambda n:(b=3+2*n) #[my math here]
Run Code Online (Sandbox Code Playgroud)

但是,这只会引发错误,我想知道是否有一种方法可以做到这一点。

python variables lambda

5
推荐指数
1
解决办法
1万
查看次数

Eller 算法的问题 - 迷宫生成

我正在尝试使用埃勒算法创建一个迷宫。互联网上关于这个特定算法的信息并不多。所以我对这个算法有一些困难,因为有些事情我不完全理解。但无论如何,这就是我现在所拥有的:

\n\n
class Cell:\n    def __init__(self, row, col, number, right_wall, bottom_wall):\n        self.row = row\n        self.col = col\n        self.number = number    # defines which set this block is in\n        self.right_wall = right_wall\n        self.bottom_wall= bottom_wall\n\n# every block includes 5x5 px white space + 1px on it\'s left and 1px on it\'s bottom for walls (if the block has ones)\ndef create_block(row, col, right_wall, bottom_wall):\n    for i in range(row-2, row+4):   # since the path is 5px wide\n        for j in range(col-2, col+4): …
Run Code Online (Sandbox Code Playgroud)

python maze python-3.x

5
推荐指数
1
解决办法
1081
查看次数

Python:如何找到连接间隔开始和结束的最长连续间隔

如何找到最长连接间隔链的长度?

例子:

[-4,1][1,5][2,10][3,5][1,3][3,8][8,12][5,11]
Run Code Online (Sandbox Code Playgroud)

这里最长的链是:

[-4,1][1,3][3,8][8,12]
Run Code Online (Sandbox Code Playgroud)

如您所见,当前间隔的结束应该是下一个间隔的开始。我想从某种意义上找到最长链的长度:length=(12-(-4))=16

我认为这涉及递归?但我不知道如何在 Python 中实现它。

提前致谢

python

5
推荐指数
1
解决办法
257
查看次数