首页 \ 问答 \ cumsum有上限和下限?(cumsum with upper & lower limits?)

cumsum有上限和下限?(cumsum with upper & lower limits?)

我想找到一种矢量化的方式来计算向量的累积和,但是有上限和下限。

在我的情况下,输入只包含1和-1。 你可以在你的答案中使用这个假设。 当然,更普遍的解决方案也是受欢迎的。

例如:

x     = [1 1 1 1 -1 -1 -1 -1 -1 -1];
upper = 3;
lower = 0;
s     = cumsum(x)                    %// Ordinary cumsum.
s =
     1     2     3     4     3     2     1     0    -1    -2

y     = cumsumlim(x, upper, lower)   %// Cumsum with limits.
y =
     1     2     3     3     2     1     0     0     0     0
                 ^                       ^
                 |                       |
            upper limit             lower limit

当累积和达到上限(第三个元素)时,它不会再增加。 同样,当累计和达到下限(在第七元素)时,它不会再减少。 一个for循环版本会是这样的:

function y = cumsumlim(x, upper, lower)

y = zeros(size(x));
y(1) = x(1);

for i = 2 : numel(x)
    y(i) = y(i-1) + x(i);
    y(i) = min(y(i), upper);
    y(i) = max(y(i), lower);
end

end

你有什么想法?


I'd like to find a vectorized way to calculate the cumulative sums of a vector, but with upper and lower limits.

In my case, the input only contains 1's and -1's. You can use this assumption in your answer. Of course, a more general solution is also welcome.

For example:

x     = [1 1 1 1 -1 -1 -1 -1 -1 -1];
upper = 3;
lower = 0;
s     = cumsum(x)                    %// Ordinary cumsum.
s =
     1     2     3     4     3     2     1     0    -1    -2

y     = cumsumlim(x, upper, lower)   %// Cumsum with limits.
y =
     1     2     3     3     2     1     0     0     0     0
                 ^                       ^
                 |                       |
            upper limit             lower limit

When the cumulative sum reaches the upper limit (at the 3rd element), it won't increase anymore. Likewise, when the cumulative sum reaches the lower limit (at the 7th element), it won't decrease anymore. A for-loop version would be like this:

function y = cumsumlim(x, upper, lower)

y = zeros(size(x));
y(1) = x(1);

for i = 2 : numel(x)
    y(i) = y(i-1) + x(i);
    y(i) = min(y(i), upper);
    y(i) = max(y(i), lower);
end

end

Do you have any ideas?


原文:https://stackoverflow.com/questions/31848337
更新时间:2023-06-09 17:06

最满意答案

尝试设置以下内容:

g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 

采取从这个答案: Java - 亚像素线精度是否需要一个AffineTransform?

以下是比较的结果:

在这里输入图像描述


Try setting the following:

g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 

Taken from this answer: Java - Does subpixel line accuracy require an AffineTransform?

Here is the result for comparison:

enter image description here

相关问答

更多
  • Line2D.double()方法不能以子像素精度绘制。 错误的是,使用RenderingHints.VALUE_STROKE_PURE ,Graphics2D对象可以通过Line2D的形状绘制“子像素”精度。 我假设我可以仅使用旋转的AffineTransform,而不必执行超级采样。 这是以亚像素精度绘制的唯一/最佳方法吗? 还是有一个可能更快的解决方案? 我想你在这里错过了一些东西。 Graphics2D对象已经拥有了一个AffineTransform并且它将它用于所有绘图操作以及它的廉价性能。 但是 ...
  • 尝试设置以下内容: g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 采取从这个答案: Java - 亚像素线精度是否需要一个AffineTransform? 以下是比较的结果: Try setting the following: g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints. ...
  • 我不知道你是否认为IE9是唯一支持分数像素单位的浏览器,但是这个假设是完全不正确的。 从规范的第4.3节 (强调添加): 长度值的格式(在本说明书中由表示)是紧随其后的单元标识符(例如, px ,em等)的 (带或不带小数点)。 并定义 : 某些值类型可能具有整数值(由表示)或实数值(由表示)。 实数和整数仅以十进制格式表示。 一个由一个或多个数字“0”到“9”组成。 一个可以是一个
  • 您可以使用Java 2D对象Path2D.Double绘制贝塞尔曲线。 只需调用方法curveTo(float x1,float y1,float x2,float y2,float x3,float y3)并定义3个坐标。 第一个Bézier控制点 第二Bézier控制点 最终终点 You can draw a Bézier curve using the Java 2D Object Path2D.Double. Just call the method curveTo(float x1, float ...
  • 如果您希望所有组件都有边框,则可以使用循环。 以下方法将为JFrame内容窗格中的所有Swing组件(实际上是JComponent )绘制一个边框: Container cont = frame.getContentPane(); Component[] components = cont.getComponents(); List list = new ArrayList<>(); for (Component comp : components) { if (comp ...
  • 为了将来的参考,我所做的就是强制IE9将这个宽度看作是一个浮点数,并将其视为一个整数: var elem = $("#element"); elem.css("width", elem.width()); 如果#element的值为IE9为50.5px,则jQuery会强制jQuery看到的值为50px。 For future reference, what I did was to force the width that IE9 sees as a float to the value that jQ ...
  • 好吧,非常基本,但想法是在对象之间手动绘制线条。 在这种情况下,我创建了一个简单的Connection对象,它维护了按钮之间的关系。 然后,我简单地使用JPanel的paintComponent方法来绘制实际的线条。 我会留给你设计一个更好的路径生成方法;) import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graph ...
  • 如果您希望对角度参数使用双精度值,为什么不使用Arc2D对象,如Arc2D.Double ? 您提到的所有参数都是双重类型。 另外,您是否正确设置了Graphics2D对象的RenderingHints以允许消除锯齿? 例如, import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.geom.Arc2D; import javax.swi ...
  • 首先更改您的方法,根据其中心和半径绘制一个圆,返回一个返回表示圆的Ellipse2D对象的方法。 除了绘制它之外,这将允许我们做一些剪裁和其他形状的东西。 将剪辑设置为大圆的形状可以防止在您不想要它们的地方制作杂散标记(想想“线条内的颜色”)。 这很重要,因为当我们在大圆圈内绘制圆圈和线条时,它们中的一些将会太大,否则会在大圆圈的边界外标记。 设置剪辑后,我们使用方法Line2D getVector(Point2D, double, length) ,原点位于大圆的中心,随机角度和随机长度(上限以保持小圆圈 ...
  • 我想我找到了解决方案。 首先发现点击的行Line2D.Double(point1, point2).ptSegDist()方法可以使用。 该方法返回线与给定点之间的距离。 如果距离小于4(因为笔划宽度为8),则表示用户单击该行。 那是最难的部分。 之后,我向Line类添加了一个布尔成员来保留“clicked”信息。 最后,在删除操作中,我在行列表中循环并删除所选的。 请注意,我使用isControlDown()来确定用户是想要选择一行还是想要绘制另一行。 因为某种程度上我必须决定什么是所需的操作。 publ ...

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。