我使用public class MainActivity extends Activity {
public static final int UPDATE_TEXT = 1;
private EditText etx1;
private EditText etx2;
private TextView result;
Button getresult;
private double num1;
private double num2;
private double resultnum;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
new Thread(new Runnable() {
public void run() {
String url = "http://localhost:8080/test/index.jsp?num1="
+ num1 + "&" + "num2=" + num2;
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
httpClient.execute(httpGet);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
result.setText(new Double(resultnum).toString());
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etx1 = (EditText) findViewById(R.id.num1);
etx2 = (EditText) findViewById(R.id.num2);
result = (TextView) findViewById(R.id.result);
getresult = (Button) findViewById(R.id.btn);
View.OnClickListener buttonHandler= new View.OnClickListener() {
public void onClick(View v) {
num1 = Double.parseDouble(etx1.getText().toString());
num2 = Double.parseDouble(etx2.getText().toString());
resultnum = num1 + num2;
new Thread(new Runnable() {
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message);
}
}).start();
}
};
getresult.setOnClickListener(buttonHandler);
}
}
构建了scipy
稀疏矩阵S
。矩阵sklearn.preprocessing.OneHotEncoder()
有10 ^ 6行,500列。
我还有一个S
数组numpy
,其中包含10 ^ 6个值,如下所示:
A
我希望在数组A = [1,1,2,2,2,3,4,5,6,6,7,8,8,8,...]
中编写的组之后的稀疏矩阵S
上执行分组,并使用A
作为聚合函数。
我该怎么办?当然,我的一切都需要适应内存,所以我被迫使用稀疏矩阵numpy.sum()
。
答案 0 :(得分:2)
如果索引正在增加(似乎来自您的示例),则可以在列表的itertools.groupby
上使用enumerate
。对于每个组,请使用numpy's indexing。
循环可能如下所示:
import itertools
import operator
for g, inds in itertools.groupby(enumerate(A), key=operator.itemgetter(1)):
...
并且...
应该替换为使用S
执行任何操作的代码。要了解原因,请注意以下示例:
for g, inds in itertools.groupby(enumerate(A), key=operator.itemgetter(1)):
print g, list([i[0] for i in inds])
产生
1 [0, 1]
2 [2, 3, 4]
3 [5]
4 [6]
5 [7]
6 [8, 9]
7 [10]
8 [11, 12, 13]
您可以告诉第一项是该组,第二项是索引列表。 Numpy拥有广泛的实用工具来切片和放大给出这样的清单索引。