我正在尝试做这样的事情:
Dim sheetsArray As Sheets
Set sheetsArray = ThisWorkbook.Sheets(Array("Project", "Project 2", "Project 3", "Project 4"))
Application.ScreenUpdating = False
If ShowHide1.Name = "Show All Projects" Then
For Each sheet In sheetsArray
sheet.Visible = xlSheetVisible
Next sheet
ShowHide1.Name = "Hide All Projects"
Sheet1.Activate
Else
For Each sheet In sheetsArray
If (sheet.Name <> ShowHide1.Name And sheet.Name <> AlwaysShow.Name) Then
sheet.Visible = xlSheetVeryHidden
End If
Next sheet
ShowHide1.Name = "Show All Projects"
Set sheetsArray = ThisWorkbook.Sheets(Array("Jagger1", "Jagger2", "Jagger3", "Jagger4"))
Application.ScreenUpdating = False
If ShowHide1.Name = "Show All Jagger" Then
For Each sheet In sheetsArray
sheet.Visible = xlSheetVisible
Next sheet
ShowHide1.Name = "Hide Jagger"
Sheet1.Activate
Else
For Each sheet In sheetsArray
If (sheet.Name <> ShowHide1.Name And sheet.Name <> AlwaysShow.Name) Then
sheet.Visible = xlSheetVeryHidden
End If
Next sheet
ShowHide1.Name = "Show all Jagger"
AlwaysShow.Activate
End If
Application.ScreenUpdating = True
End Sub
其中r i ,c i ∈{0,1,2,...,n}分别是行索引和列索引,而I [· ]是一种指标函数,如果条件为true,则值为1,否则为0。
我在进行此设置时遇到了麻烦。我可以通过以下方式轻松遍历一切:
I[ xr1,c1 > xr2,c2 ]
但是,我试图向量化此代码以提高效率并一举完成比较。我怎样才能做到这一点?我正在使用 numpy 。
说明更新:
我正在训练一个简单的微笑分类器,该分类器分析灰度图像 x ∈R 24×24 并输出预测y∈{0,1},指示是否图像在微笑(1)或不是(0)。分类器将基于输入图像的非常简单的功能(包括像素值之间的二进制比较)做出决定。
每个功能的计算方式为:
for r1 in range(0,n):
for c1 in range(0,n):
for r2 in range(0,n):
for c2 in range(0,n):
#do something with (r1,c1,r2,c2)
其中r i ,c i ∈{0,1,2,...,n}分别是行索引和列索引,而I [· ]是一个指标函数,如果条件为true,则值为1,否则为0。 (假设已定义n)
根据我到目前为止提到的内容,我正在尝试为5个功能训练一个整体的微笑分类。如果认为图像正在微笑,则合奏的输出为1,否则为0。这由整个5个成员的平均预测确定。如果5个合奏预测变量中有超过一半的人认为图像在微笑,则合奏说这是微笑;否则,合奏表示没有笑。
这就是我想要做的:
在每个回合j中,我想选择第j个特征(r1,c1,r2,c2),以便–将其添加到已选择的j-1个特征集合中时–总体精度训练集上的分类器被最大化。更具体地说,在每个回合j,如果当前元组是最好的(对于回合j),我正在考虑每个可能的像素位置元组(r1,c1,r2,c2),然后将其保存为我的“迄今为止最好的”代表第j轮。如果没有,我会忽略它。然后,我继续到下一个可能的像素位置元组,并重复直到搜索完所有像素为止。在第j轮结束时,我将为该轮选择最佳功能,并将其添加到我选择的功能集中。一旦添加,它将永久保留在集合中–永远无法删除。 (否则,完全不会采用协商一致的算法。)然后我继续进行j + 1轮,直到您完成了所有5轮回合。
我不需要整件事。我只是在寻找一种矢量化代码的方法,而不必使用嵌套的循环
答案 0 :(得分:3)
利用 broadcasting :
#include <stdio.h>
void main()
{
int first, second;
int answer = 1;
while (answer == 1)
{
puts("Please enter the first integer ==> ");
scanf("%d", &first);
puts("Please enter the second integer ==> ");
scanf("%d", &second);
printf("%s", "The sum of %d", first , " and %d", second, " is %d", first + second);
puts("Would you like to add two more integers?\n"
"(1 for yes) ==> ");
scanf("%d", &answer);
}
}
或者,我们可以使用first = np.reshape(array, (*array.shape, 1, 1))
second = np.reshape(array, (1, 1, *array.shape))
result = (first > second)
,它对元素的每个唯一排列进行大于的比较:
np.greater.outer
这将产生形状为result = np.greater.outer(array, array)
的{{1}},其中np.ndarray
是您想要的值。
示例:
(*array.shape, *array.shape)
输出:
result[r1, c1, r2, c2]