我正在通过GUI处理python中的大型数值数组。 我想将切片功能暴露给GUI中的文本框,这样我就可以轻松选择应该用于手头计算的数组部分。
我想做的简单例子:
String DownloadImageURL = result.getExtra();
应输出:
public void saveImage(){
try {
URL url = new URL(yourImageUrl);
InputStream is = (InputStream) url.getContent();
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = is.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
//return output.toByteArray();
Bitmap bm = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
} catch (MalformedURLException e) {
e.printStackTrace();
//return null;
} catch (IOException e) {
e.printStackTrace();
//return null;
}
FileOutputStream out = null;
try {
out = new FileOutputStream(filename); //some String filename
bm.compress(Bitmap.CompressFormat.PNG, 100, out); // bm is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我发现了切片函数,但是我需要手动解析我的字符串并创建一个切片。有更简单的方法吗?
答案 0 :(得分:1)
不,你不能这样做。
您必须实现一个函数来解析来自GUI的数据,进行一些安全检查并从数组中获取值/值。
答案 1 :(得分:0)
也许因为你只想要一个非常有限的字符集,所以可以使用eval
这一次:
if not all(c in "1234567890-[],: " for c in b): # maybe also limit the length of b?
# tell user you couldn't parse and exit this branch
slice_ = eval(f'np.s_[{b}]')
# slice_ can now be applied to your array: arr[slice_]
答案 2 :(得分:-1)
试试这个我认为它有效,假设你的字符串中会得到最小值和最大值。
import re
a = "2:4"
min = int(min(re.findall(r'(\d)',a)))
max = int(max(re.findall(r'(\d)',a)))
print arr[min:max]