在numpy / python中使用string作为数组索引

时间:2017-11-17 13:25:40

标签: python arrays numpy slice

我正在通过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();
    }
}
}

我发现了切片函数,但是我需要手动解析我的字符串并创建一个切片。有更简单的方法吗?

3 个答案:

答案 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]