问题描述:
from PIL import Image
from io import BytesIO
from django.core.files.base import ContentFile
from resizeimage import resizeimage
class SomeModel(models.Model):
image = models.ImageField(upload_to=your_get_file_path_callback)
def save(self, *args, **kwargs):
pil_image_obj = Image.open(self.image)
new_image = resizeimage.resize_width(pil_image_obj, 100)
new_image_io = BytesIO()
new_image.save(new_image_io, format='JPEG')
temp_name = self.image.name
self.image.delete(save=False)
self.image.save(
temp_name,
content=ContentFile(new_image_io.getvalue()),
save=False
)
super(SomeModel, self).save(*args, **kwargs)
获取字符串的行或列向量,以及trs
和ch1
两个字符。如果ch2
与ch1
中的任何元素匹配,那么trs
的该元素将被trs
替换。如果ch2
不在向量中,ch1
将返回为未更改。
一个简单的例子:
输入:trs
,
输出:ww = kellen({‘YOYO’, ‘YOYO’},’Y’,’X’)
我认为ww = {‘XOXO’,’XOXO’}
函数可以使这个问题更容易,但我想知道MATLAB如何在不使用strrep
函数的情况下处理这个问题的基本层面。所以我请求你们不要使用strrep
函数来纠正我的代码。
我是MATLAB的新手。实际上,我也是编程新手。我知道我必须先学习C语言,但我不知道为什么我要挣扎。
这是我的代码,但似乎无效。
strrep
当字符串向量的大小是行向量时,我的代码工作正常,但是当我传递trs字符串的标量时,我的函数不能正常工作。例如:
function ww = kellen(trs,ch1,ch2)
[r c] = size(trs);
if r == 1 && c > 1
for i = 1:c
ind = trs{i} == ch1;
trs{1,i}(ind==1) = ch2;
ww = trs;
end
if r == 1 && c ==1
for i = 1:c
ind = trs{i} == ch1;
trs{1,i}(ind==1) = ch2;
ww = trs
end
end
我应该修改哪部分代码?
答案 0 :(得分:2)
for i = 1:c
if trs{i} == 'c1'
outp = [trs 'c2'];
else
return
end
end
我在代码中看到的第一个问题是:if trs{i} == 'c1'
这里有很多问题:
'...'
周围添加ch1
引号,使ch1
为字符串文字,而不是传递给函数的字符1的变量。删除引号。 这是您的错误的来源,尝试将4个字符的字符串与3个字符的字符串等同。 trs{i}
与单个字符ch1
等同起来。您可以在Matlab中执行此操作,但不能在if
语句中执行此操作。让我们看看您的示例输入,trs{1}
是'YOYO'
,如果我们尝试'YOYO'=='Y'
,我们会得到一个像[1 0 1 0]这样的逻辑向量。现在if
只需要1
或0
而不是向量。所以我建议删除if语句并利用Matlab的逻辑索引:
outp{c} = []; %// this is just preallocation
for i = 1:c
temp = trs{i};
idx = temp==ch1 %// Get a logical matrix of which characters match
temp(idx)=ch2; %// Use logical indexing to replace all the characters that match in this string in one go!
outp{i} = temp;
end
了解此代码后,您可以简化:
outp = trs;
for i = 1:c
outp{i}(outp{i}==ch1)=ch2
end
答案 1 :(得分:0)
您可以使用ismember()
查找ch1
中trs
所在的位置。因此,实际上trs(ismember(trs,ch1)) = ch2;
会将ch1
的所有实例替换为ch2
中的trs
。
但是,您需要确保ch1
和ch2
只有一个字符长。如果你想让trs
作为字符串的单元格,就像在你的问题中那样,你可以像现在一样循环它,或者你可以看一下cellfun()
函数。 / p>